From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id A8E2B3858D32 for ; Mon, 19 Feb 2024 19:52:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A8E2B3858D32 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A8E2B3858D32 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1708372333; cv=pass; b=uOK0rRfWNpcw0rg7QM0hTPSV3sy5j6Rx3oPAUBPDTs8t0A9mt7qxZV+wNI3+aYP8Ky55XNRmNdest763plYORekJejMbvx+9HgYaCMqnOJBt+WEC2viTmdKwvOtfF6ayHji3T3gaCeNTv437muuZYDFvGVBKuaMgLIi0POuigQI= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1708372333; c=relaxed/simple; bh=ijIeXS46P2ZPYJyhUgt6cJNc6DxNtE25LEUl4Noe4SI=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-Id: MIME-Version; b=uHu5RbGDeB/gECb3gp9zEhdq0fvSNsmguWAYYWD0d1B/RnJD9rLSaN5f18FHcdyrQsDBXAs1FzQtlCMdIopmaAV6oZLZ7mYrXZBV6tYOIV6WrPDmnJZq6RDCHoOXspu0MkUfyKWdyG782a8w2S2FEG9ZuuetNIf2vU1FzEEcJHM= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 41JIJelh006569 for ; Mon, 19 Feb 2024 19:52:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : subject : date : message-id : content-transfer-encoding : content-type : mime-version; s=corp-2023-11-20; bh=sU8fuDUCyLs7B1MLu5dfeiRlfcvkrAO+BmoH8ousbCo=; b=UKP9zvYiYIwkR4+L9eY9zT1A4TJ1PMTqVhooPnwge/HqxAhGzr10x+raeP/M9PyMvbJH aU+QijamA56A7yfFETmPI6+2baMVeEb5q1ySDHZb5BZAYryBUsa70xAec0q49Jw4nepo JBZTuLP2qxU6xZxi4J3nUQqkLLtrhuCVuvjCL9OkZybg0ydWtfbVrviIqy7iIdif0Opc g4dDEjVXTYgV+/zIkAcoaadCsiN0Uq8PIJuEwYG4Neo5znCfYsLwJf3D1x80xQ1/oxFD ycP+VFN6ZlYv6xfkcEEVPbRP3UYwoBdq+zCmtDXOqpA4Pygblvep9rDYtvmnX15jonId Mg== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3wanbvcwep-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 19 Feb 2024 19:52:09 +0000 Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 41JIFYGJ032559 for ; Mon, 19 Feb 2024 19:52:08 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2100.outbound.protection.outlook.com [104.47.58.100]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3wak86aphe-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 19 Feb 2024 19:52:07 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=apgOhmIe2wJeWUD4i1r0hD4kBjkvPmdiFCH3OR2orhWVeNOAhdZDqmJk9PJugkuq0SNKHOOn3EwSRMCteWlP3Wk3hbVY07mtG79hgY8vOQq9PkZ4tN+qlPNBOzYdE+aqUOvxU1I8iPSRVKvoPb8cXNu9QYweDAHBUfZxVDrPRctoa+O8KAbpHlzBvXWgZAvELRf1ryZJmn7Qa4jnJXTQpicsvGT5FvoBaB8moPaSLRY02BigGbqmtOoPoLUPXpLlbYh/oT5yzC9fi1VMiNRZfItX9vRdVtXHbXVk1psfi8NrVIdHYrJtB07UcgUqKPJNedfk+Xu5NAl7bQQbaP54/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sU8fuDUCyLs7B1MLu5dfeiRlfcvkrAO+BmoH8ousbCo=; b=YEtLkVZ3HgB8fYf35nxNH8euirNOuDJDwLUo+Juzo7pdwfZH9KXDjJ+MJ1HtMplS1BlAPsVKAU1dzDFyZ048q7mGeCQF+zyiKO88XdsNfRsKulNu9Asu4ssznoB56TmwJKZXG8a/M0Z3Ox3siJBxx7lUiu+FOq5ujIl793MqQWI6BvUTSeYyyRFE8uqsTStfvPToIuZfNGUXvZ9YKI880+KkQswaT38NGnM1zys9AQmYXLBLnd92XqkJcoKdg80ZM35s57pcrMtXorvMew+Rl/XVsjzZELhEiedVGku2Et8UmZxou+LxWOkO0xUOfmWD13SknP4EL3AjTp30GqDX3g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sU8fuDUCyLs7B1MLu5dfeiRlfcvkrAO+BmoH8ousbCo=; b=WBCzar6WeorGnM4yclymnZ1tSsT5FkRyt5TnQ3ShX2hn+TzBqiF1UUoAoH/QR4B9EzBz2T8oN2QPIbooLYiQjwsBblE4B1UKzIQSm2oEqNkw+A1sT4eTDWnfQf0eHdEWVQNTYSkQBto7s7DEDSP4oqYqjN6VRVdnpa78EcJkPWY= Received: from DM6PR10MB3113.namprd10.prod.outlook.com (2603:10b6:5:1a7::12) by PH0PR10MB4629.namprd10.prod.outlook.com (2603:10b6:510:31::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7292.38; Mon, 19 Feb 2024 19:52:06 +0000 Received: from DM6PR10MB3113.namprd10.prod.outlook.com ([fe80::cafd:c8d6:e2c3:3a1]) by DM6PR10MB3113.namprd10.prod.outlook.com ([fe80::cafd:c8d6:e2c3:3a1%4]) with mapi id 15.20.7292.036; Mon, 19 Feb 2024 19:52:06 +0000 From: "Jose E. Marchesi" To: binutils@sourceware.org Subject: [COMMITTED] bpf: gas: avoid UB in pointer subtraction Date: Mon, 19 Feb 2024 20:51:59 +0100 Message-Id: <20240219195159.21385-1-jose.marchesi@oracle.com> X-Mailer: git-send-email 2.30.2 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: FR0P281CA0056.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:49::6) To DM6PR10MB3113.namprd10.prod.outlook.com (2603:10b6:5:1a7::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB3113:EE_|PH0PR10MB4629:EE_ X-MS-Office365-Filtering-Correlation-Id: 5a22d104-be96-4699-3460-08dc31844008 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wOImJ47Yzf4nK09zUWCRhOKiqSc6W6IXN7NY9+qZPi4DwKFeBGdeDZVJFMDGg4IUKCxkErZ64dRrbobkWhEaWjNEnnmeVgAtDUyaO9UugzAHwoi27GvvNJW2imWcQKdXokU3zS5dVpoH9zgEfwiA4459ZpUkbW4JoHpUzdclNQ8cu6eHfvl9NI5q9U4rfxk7+P81y9Qxdw1oYxi7gI9YkVnOhhjEFmF6HaWOVVJ5v6Perv6RyDmX7AL9Y662zzuVZd9aX713RgrgvFSThlX4nRdzUqLrUWWH08wB2+uTt3WABT4FkJBa3dGBh+oNxELu+iP3XiGyTEhJ4IuwTEqKkEnKUWpxBwinDO0xjydMHLHcHYRZKNnZEe3O7xKbI2MI2eAbmNP7sClnAh/0bOLNzXy4uwIZGOsTTOgd/tkS8kKX32KclTvHXTtV45bnKjqwyrEZOEWOesKmeNVJ3bjaG/YyK7BYe6Pq/Aal9wd19fkazfaVHl8L3YMeRgUhbEvoL2xXDyBx4mx+IHfWG6CUOYL4t97GSi4OL7KaSiZG45Q= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR10MB3113.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Z+ZBSvWAYRI4YHWURcewg1Am2oImfr9+nFJypyzQtMn/zlZgvCh/DzzUx/nL?= =?us-ascii?Q?6yD7b+oPatrZ1StLfbMOcewVJUWnxHukmf7dUtSr/6az3DOIM6W3eVmgq648?= =?us-ascii?Q?4gSYi75/ZDX+s8yPg6NE4RqT8ZwmUhdLAijNHXF91+1IdfmVuTIHk+2mAKdI?= =?us-ascii?Q?U3TJGhy0pWU/83p0i0waefdibuZg4rMQ2cGBCY0udTDfe+hWc489gZobxfPr?= =?us-ascii?Q?wILALnACsjDGWi9YdpqZxt/spUgKtrUTaqqp7aEveIx0pgtkAMr+ESsJQBId?= =?us-ascii?Q?0y2rh9A8XTVSVn6Qu2OwOzDVGwqliss6oUz/k8ZmcEVQeixBb8yddlJEHK0H?= =?us-ascii?Q?4BV42hoKaJDYsxnr5DsQB3ssEi1Flq1+xSAciSHbBSuZ9I0XlSSli9sDgy/N?= =?us-ascii?Q?f0SSYpSSgV6Tx06IYCdYrF1EeeoHimmC8XaTU2r1kZR6KEd9w7ZQMQhF6IBJ?= =?us-ascii?Q?eO/6j/DJp6byjCI9deA0UwnFGwbgZbFWbqImUk+hcMNkS/Hw2XGM3Pg1yCxA?= =?us-ascii?Q?WcC7gybZUkvjyTVgTNCDA11kUALlqKbM6rpV+d6kQA0K4Kfxg3Hk+50ht+DM?= =?us-ascii?Q?/5u59eBGApk1/A4QBgNKb5zph7YCWJ6JsbnhtZyhUAsoVpvzEU92Ff6G3qgT?= =?us-ascii?Q?XUCufh6FNgED0iyiMNxrHFErsrauAjxf28oKA+YAh6yK3Hnaoa6V+x8HjWYS?= =?us-ascii?Q?G7EjUb83X8ONUlscsxc+9fVP3GtYHgn8zkAm/9SQAg1hVMXndnwH4W3PKuj+?= =?us-ascii?Q?InQMasbdLbG1DwblhsUJ6Nev+9TfxmrzmgyA7ehQeM71tium2DTFUJRULJvb?= =?us-ascii?Q?9fKK3ImKYBk3fbFJlsDzkWNpDCrWyQ7zFWAzeJcby5/4dI3T46O/vKZzVuio?= =?us-ascii?Q?JsY0orYf+qI4Vk6SAgvqX5ThaFW8G6oMG8biJre3IEdhMV4DW87dx31/dwmN?= =?us-ascii?Q?4rNQxanfJfdbH2gp0OuvRkgntC9BaXX9XEptO1dYd60y0AK8dB646PejbbGe?= =?us-ascii?Q?JPgDSWtBZ2QT8RCJ3DfFGzkG8Bjb+AgfLQAoDlDBK1QUYaINi3zKDZVfjy4r?= =?us-ascii?Q?gmAOtK1Enb/hrp2oq62YhdVDz9V5tGjeKkBnXGMafgU1vz97oy2uOaDbtb+I?= =?us-ascii?Q?0zeWi8oNS3v9xaVjmKn7ARH6/5szZTUW2y8Kt7RrYdtNix/72VuDvjR91vKe?= =?us-ascii?Q?8A5sWXDoJ0RouS9/8XznjuOKtxelgQaJM+d9SMAwZBbA0WxWu/Wd54J3MOX5?= =?us-ascii?Q?LzAVcqPZ0nFWmMKIJhiBZHkJ6eh3/xoU4Y1T3eS58kdufC6BHualmJw1p4pv?= =?us-ascii?Q?78+DqO+CcQJ9GYJbaR8AR2+zFb/lNQhNa72TIaIEksfL76ps5CMS2F5sqs/G?= =?us-ascii?Q?lH8w3j4mSCCAMzLVvFhnkr5DS4FR6h5/8tzOEXok93MNX++mAquD4vc/jSdB?= =?us-ascii?Q?qJCqNF2DwhLqBQSUO2Dqye3uELkqI8BJ/MnfNmb+f+frEyaZVJLAUQlCn3II?= =?us-ascii?Q?A9grp/qkV9vby6CrdtsVkDizeFEduFKviY2yKkZsLIJX1GFunSAXEJrGvOhR?= =?us-ascii?Q?W4wtKhYsx5bNBf9xMoPwesjM5Zg/+5EkWiWXXQUq/kXQCvWmSnq0FAWtEEws?= =?us-ascii?Q?6w=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: PrHvOjc0aVqIz/1KO/6+SBGRXrx/wyMWTvqTr7FoShOHEp6ChAjH/zc5JkTOkdUS/3lOwAXMosjJiCg6s3yrihfma1a1AO9FPbh7OX0LYXr56N6OqQTbxedJrShlffzMw+bPtiS0BGdQpl5hucdOH2wev/Q3yHJbcuG2pQj+WEv4a5bqL+4XyBU7ZSsCEvh6io/KwuzJPup87oD9v247vosB2j9nK2oYgatzi/7OeQyLBRmoP9j23RcA10uL8FLVNciH7eyuxCvB2hHUvyGMF8r0+4x0jspfP//QawGdYYprCgTwaVfslPvfBqbkKXFt/d35++Y/YTlNgyWG3IcMoczHUucXGGHu6+EGsHHFmBT09yw7cUXGstoUxOWHgDFpUro5qf8hf3gAglpRDOcAzPQEyC4IURKXDm5ceVUctgjoMKiu2Fb8PIFx95VLVt1pQEBpdtxdH+FpM1WNHLox18dyCPEG8IbrC3cXssxzJAdSadYLwur4mSsb52YnMfukV30Ci3ijFceBWU90209yUCDPDXdtUvjiNsuV49fzDaMmWTJp0Vzh4TcdbCzmOMiOnCc2WY2oWsElCczAxfeSqOZXfUr3IGfNT/cFb54X+Ic= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5a22d104-be96-4699-3460-08dc31844008 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB3113.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Feb 2024 19:52:06.0495 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: aVI74Xp144ZVs8jRlq3a0wAOrpOeGF5vYBdGtw1s/ThKvkqpVbGc8WkYMCouhWtznKWOoTj1M0TpMZ/Yd6GNU0aH1Tz4VlsWXTLRwQ2TjMk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR10MB4629 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-19_18,2024-02-19_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 phishscore=0 malwarescore=0 bulkscore=0 adultscore=0 suspectscore=0 spamscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311290000 definitions=main-2402190150 X-Proofpoint-GUID: WDaC1SIgXqRoKhIFDHqUhaRjVOFnBpfn X-Proofpoint-ORIG-GUID: WDaC1SIgXqRoKhIFDHqUhaRjVOFnBpfn X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: The PARSE_ERROR macro in md_assemble performs pointer subtraction. If parse_expression returns NULL then the later will be part of the subtraction and therefore UB will be incurred. This patch changes md_assemble to: 1. Accommodate all invocations to parse_expression to the fact it will return NULL when a parse error occurs. 2. Avoid UB in PARSE_ERROR. Tested in bpf-unknown-none target / x86_64-linux-gnu host. gas/ChangeLog: * config/tc-bpf.c (md_assemble): Fix to take into account that parse_expression can return NULL. (PARSE_ERROR): Avoid passing invalid length to parse_error. --- gas/ChangeLog | 6 ++++++ gas/config/tc-bpf.c | 37 +++++++++++++++++++++++++------------ 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 8be29915d8d..3ae1d777359 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2024-02-19 Jose E. Marchesi + + * config/tc-bpf.c (md_assemble): Fix to take into account that + parse_expression can return NULL. + (PARSE_ERROR): Avoid passing invalid length to parse_error. + 2024-02-15 Will Hawkins * testsuite/gas/bpf/indcall-1-pseudoc.d: Do not select xbpf cpu diff --git a/gas/config/tc-bpf.c b/gas/config/tc-bpf.c index 43e098c2a86..e23de4e0d19 100644 --- a/gas/config/tc-bpf.c +++ b/gas/config/tc-bpf.c @@ -935,7 +935,7 @@ encode_insn (struct bpf_insn *insn, char *bytes, if (immediate_overflow (imm, 32)) as_bad (_("immediate out of range, shall fit in 32 bits")); else - encode_int32 (insn->imm32.X_add_number, bytes + 4); + encode_int32 (insn->imm32.X_add_number, bytes + 4); } if (insn->has_disp32 && insn->disp32.X_op == O_constant) @@ -1454,7 +1454,7 @@ md_assemble (char *str ATTRIBUTE_UNUSED) partial_match_length = 0; errmsg = NULL; -#define PARSE_ERROR(...) parse_error (s - str, __VA_ARGS__) +#define PARSE_ERROR(...) parse_error (s > str ? s - str : 0, __VA_ARGS__) while ((opcode = bpf_get_opcode (idx++)) != NULL) { @@ -1590,6 +1590,8 @@ md_assemble (char *str ATTRIBUTE_UNUSED) else if (strncmp (p, "%i32", 4) == 0 || strncmp (p, "%I32", 4) == 0) { + char *exp = NULL; + if (p[1] == 'I') { while (*s == ' ' || *s == '\t') @@ -1601,17 +1603,20 @@ md_assemble (char *str ATTRIBUTE_UNUSED) } } - s = parse_expression (s, &insn.imm32); - if (s == NULL) + exp = parse_expression (s, &insn.imm32); + if (exp == NULL) { PARSE_ERROR ("expected signed 32-bit immediate"); break; } + s = exp; insn.has_imm32 = 1; p += 4; } else if (strncmp (p, "%o16", 4) == 0) { + char *exp = NULL; + while (*s == ' ' || *s == '\t') s += 1; if (*s != '+' && *s != '-') @@ -1620,46 +1625,53 @@ md_assemble (char *str ATTRIBUTE_UNUSED) break; } - s = parse_expression (s, &insn.offset16); - if (s == NULL) + exp = parse_expression (s, &insn.offset16); + if (exp == NULL) { PARSE_ERROR ("expected signed 16-bit offset"); break; } + s = exp; insn.has_offset16 = 1; p += 4; } else if (strncmp (p, "%d16", 4) == 0) { - s = parse_expression (s, &insn.disp16); - if (s == NULL) + char *exp = parse_expression (s, &insn.disp16); + + if (exp == NULL) { PARSE_ERROR ("expected signed 16-bit displacement"); break; } + s = exp; insn.has_disp16 = 1; insn.is_relaxable = (insn.disp16.X_op != O_constant); p += 4; } else if (strncmp (p, "%d32", 4) == 0) { - s = parse_expression (s, &insn.disp32); - if (s == NULL) + char *exp = parse_expression (s, &insn.disp32); + + if (exp == NULL) { PARSE_ERROR ("expected signed 32-bit displacement"); break; } + s = exp; insn.has_disp32 = 1; p += 4; } else if (strncmp (p, "%i64", 4) == 0) { - s = parse_expression (s, &insn.imm64); - if (s == NULL) + char *exp = parse_expression (s, &insn.imm64); + + if (exp == NULL) { PARSE_ERROR ("expected signed 64-bit immediate"); break; } + s = exp; insn.has_imm64 = 1; insn.size = 16; p += 4; @@ -1717,6 +1729,7 @@ md_assemble (char *str ATTRIBUTE_UNUSED) { as_bad ("%s", errmsg); free (errmsg); + errmsg = NULL; } return; -- 2.30.2