Received: by 2002:a05:6602:18e:0:0:0:0 with SMTP id m14csp4167818ioo; Wed, 25 May 2022 17:10:08 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxvrMJyRLo4PSWCia8C8nTmQS6rLYjgwSw0epUrgFx421vrp4hdT1gOCSHeOdiHj2YJrOQC X-Received: by 2002:a65:6d16:0:b0:3c1:b056:5f5a with SMTP id bf22-20020a656d16000000b003c1b0565f5amr30364111pgb.469.1653523808177; Wed, 25 May 2022 17:10:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653523808; cv=none; d=google.com; s=arc-20160816; b=FjUYZGv/PQS3nXwbETkoV3edBclTEVSlAJdX66aNeASQ+CISYc2kDgEMm5PLklPO6I 8CMXm5AEIpckJ7TVLi4J7LZTKYTZilExpiRuDtpALY5Cb8YEQu42wm41W4R/0jWqk6q/ mKXllp3DuepGiHckyGZiJfzrugMORZt8A01POmY7HB3Xa+VdOtKIknWJN1y71FaKNySA Rhh++j4+4ATrgxoz3yRwL2Ke81IRu0eUhamyZQb+9gbnHwQSswbvYL9NHd7En06jb3PQ wfZDgzYUXtVLSCIi49onRL3S42RErOMItY4XBR9sn8rRn8rCBFhtw0ZLdRmT0g4ws6xp 1DLA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=L2IMR3qnRYTC2ifKlTEprymQ23atlDm3rUUvrvgkX3c=; b=xzW6lZdlbJAo1MmAFH+Eky/DlnusZ2hvilhb1kkOiB5o25E8Deup1InWbRa7GAZ7nB yqnP5OjF9yU8BvZpFlguHWgNXPVG2oEo/yQ6M0lzw0dFOPt1BpI7er80o7/+PkikQZYb FYYoq6sitJZxcpBeTEwST6+O68izmzEQMQX13DlY9C4A8KKuyAGJ7tRslII68+PcHASH CskLuowaSDD5lkNXi98JXoYdi3gfYM8h1ogmj/ZLOnY50PqkpAdR0rjTilIaibhY1qJK 5mZbK7XdoQN9kmZV7nQkC7gRCQ3kws4Tq7ofZu659whrG4dp60nbJwpuWY5Z4frRuUdX cwFQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=ryjPOJRc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e12-20020a170903240c00b0015eb226901csi19362549plo.595.2022.05.25.17.09.56; Wed, 25 May 2022 17:10:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=ryjPOJRc; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241659AbiEXUmY (ORCPT + 99 others); Tue, 24 May 2022 16:42:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38862 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229962AbiEXUmW (ORCPT ); Tue, 24 May 2022 16:42:22 -0400 Received: from mail-lj1-x232.google.com (mail-lj1-x232.google.com [IPv6:2a00:1450:4864:20::232]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C94CB6E8F0 for ; Tue, 24 May 2022 13:42:19 -0700 (PDT) Received: by mail-lj1-x232.google.com with SMTP id s20so497442ljd.10 for ; Tue, 24 May 2022 13:42:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=L2IMR3qnRYTC2ifKlTEprymQ23atlDm3rUUvrvgkX3c=; b=ryjPOJRcDOrpY1Kc/6TKon40kQIBpKO7a4H3wZLVw8V+dBVtTMjVXPNRuQQxqgLAjF clkN1r0ETSpPnFDRTaGrlsRsSK6ZFXyHTaoHWprvzV34PsIxwWZpJlw1EWhzTUwaDq3e aq0aCm119ANhWTb9oCRUHFie9vPB/IEiW/QCwp0yO9UvNMmuAizwMcngUywG2ZiQdpss zCqCaYwu7pHyAu1ZNjIP1YfASIKX5Mbl3ZwE3fxrS6B1/R9qXFBj9LakquKxrZvoS1Qi NqxePdKdgjL6esYMrA6ComcGu66yb08stflO8J6mY6/lFC6gSxULw5u7mSPcfBFXCZy7 FrTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=L2IMR3qnRYTC2ifKlTEprymQ23atlDm3rUUvrvgkX3c=; b=mWUrwWDeL5UndkiNGMZecYXGQP44kB+6vIZ/WRpORCuzPcc3CztPUNDGzmmJHDmBNz 4QkR9FRr0VQxRmC6gWXZ+tDOM0zJ4OeWlQbfB9EQSKPwnRNNZCIYBH+daqG8iGZAahZ3 Wmc3B71JkT/yK1A8T8xTFd+q2+aqKXBxj3EwGCp6VS1Ktat7AMh2ZqqzGJhEJfLz9h3G 3xenw9NOS2tadx47UacUguFKJAWTbvjkrwVlF3g8uxtWKwKIEISxgfT8Skgw/UlYahOb pS0cVjoCCs12sVf8gzVxC6wkFaBqnHrdoqvhjLhnZ5Bf1xlvdY5YWwoZrHEUVWc2OWMm f/Vw== X-Gm-Message-State: AOAM532rgXslS0U7Um3TACZVCTKuuP5GCcXXCGWS3zUPba31CXusauxO eU+dZ5J6lY8xIlpY5X0K5iFWgLWaU7hIJ0NlVw44Pw== X-Received: by 2002:a2e:b1c7:0:b0:253:dfbf:56cf with SMTP id e7-20020a2eb1c7000000b00253dfbf56cfmr12601797lja.513.1653424937882; Tue, 24 May 2022 13:42:17 -0700 (PDT) MIME-Version: 1.0 References: <20220523164626.858340-1-masahiroy@kernel.org> In-Reply-To: <20220523164626.858340-1-masahiroy@kernel.org> From: Nick Desaulniers Date: Tue, 24 May 2022 13:42:06 -0700 Message-ID: Subject: Re: [PATCH 1/5] modpost: fix undefined behavior of is_arm_mapping_symbol() To: Masahiro Yamada Cc: linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org, Michal Marek Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, May 23, 2022 at 9:48 AM Masahiro Yamada wrote: > > The return value of is_arm_mapping_symbol() is unpredictable when > "$" is passed in. > > strchr(3) says: > The strchr() and strrchr() functions return a pointer to the matched > character or NULL if the character is not found. The terminating null > byte is considered part of the string, so that if c is specified as > '\0', these functions return a pointer to the terminator. > > When str[1] is '\0', strchr("axtd", str[1]) is not NULL, and str[2] is > referenced (i.e. buffer overrun). > > Test code > --------- > > char str1[] = "abc"; > char str2[] = "ab"; > > strcpy(str1, "$"); > strcpy(str2, "$"); > > printf("test1: %d\n", is_arm_mapping_symbol(str1)); > printf("test2: %d\n", is_arm_mapping_symbol(str2)); > > Result > ------ > > test1: 0 > test2: 1 > > Signed-off-by: Masahiro Yamada I guess this is shorter than a call to strlen then conditional call to strchr. Reviewed-by: Nick Desaulniers > --- > > scripts/mod/modpost.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c > index 6f5c605ab0fb..845bc438ca49 100644 > --- a/scripts/mod/modpost.c > +++ b/scripts/mod/modpost.c > @@ -1179,7 +1179,8 @@ static int secref_whitelist(const struct sectioncheck *mismatch, > > static inline int is_arm_mapping_symbol(const char *str) > { > - return str[0] == '$' && strchr("axtd", str[1]) > + return str[0] == '$' && > + (str[1] == 'a' || str[1] == 'd' || str[1] == 't' || str[1] == 'x') > && (str[2] == '\0' || str[2] == '.'); > } > > -- > 2.32.0 > -- Thanks, ~Nick Desaulniers