Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp1315299iob; Sat, 14 May 2022 05:55:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw/joIGFg1fUSmVT/udnpqXEUAbscMGTGwj7uodtPtbaM/FIofaPUEP6F+sHJchvS/T0xKU X-Received: by 2002:a5d:5307:0:b0:20c:dcb4:cb97 with SMTP id e7-20020a5d5307000000b0020cdcb4cb97mr7446545wrv.686.1652532937320; Sat, 14 May 2022 05:55:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652532937; cv=none; d=google.com; s=arc-20160816; b=hXHEvaJ3UDkw/Fpxnw/tSoqQwy9DkA+yYH83kkqNVooFI75Yzt9Nbs74hVBpGwVfyL gZL2FiZ5djpVIrQZ/Yc2DzJ0Sm7jv0Wr2waVGAOuDYtmcOuVvJbBdM8ukjW4E4XAgvai eQD3b+5OOpYHuY3L44gvEAQSd6VoI0RGD83OSwF0zo8szx30ke6eR95Agt52/aP8dbnC kd4jrUgdNxBRgvj+LYAqeHEh74CqHa6yeQKAEvATnmc+n5ukHyXaFTmjbk5TfHoElS7X hl9oBQ4G4Lxzp/AU4864dcd7pjweJuvtcwtC1eWgHbwRbf1xdg3vm71a2b04LBp9RT/F gcFw== 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=rdCmWq9zxuWmGFMg5JjBmDBXnZoUlT/mh06bYjG+Y50=; b=BxF2OWx8HjE4slQ4wuwVp8pjCjoNt6ju3bZP+h9DfiYNODAOL71DX3q2eapkp/HSyp BoOGMd7Xj2skWU/74aAdkPf84rAUmEuL1rIHcnF0hS37vlOH53YOv9ydf0eVAcHpeujX O7xWlTBgR905QxZk51Doqyh1OM1fB+PlyEFY/4dLGOye1poZrnE/zIcOaKK0mmUp7VK+ KgRU6k6e3/NOG6PSh0YDqCypN3P2uyV5cqLRI5FNb9VPJd/dwU0E17VnJrUTJJtLuH5t 05X0WDpdh6hmO2ep8OOQ2zirBso7buI1IlJcZEcIIFo4pU95JhPvndiqE14twFjIOIP4 VNeg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=qJE0Q13g; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t12-20020adff04c000000b0020adf5b8e22si4134090wro.138.2022.05.14.05.55.07; Sat, 14 May 2022 05:55:37 -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=@gmail.com header.s=20210112 header.b=qJE0Q13g; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232271AbiENMKw (ORCPT + 99 others); Sat, 14 May 2022 08:10:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45106 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232229AbiENMKl (ORCPT ); Sat, 14 May 2022 08:10:41 -0400 Received: from mail-yb1-xb31.google.com (mail-yb1-xb31.google.com [IPv6:2607:f8b0:4864:20::b31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4B09CE27; Sat, 14 May 2022 05:10:39 -0700 (PDT) Received: by mail-yb1-xb31.google.com with SMTP id j84so8734465ybc.3; Sat, 14 May 2022 05:10:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=rdCmWq9zxuWmGFMg5JjBmDBXnZoUlT/mh06bYjG+Y50=; b=qJE0Q13glfPO2JTth07fMdpWqHX+R1f6UtXVPCyhumcTIp30bR4lojuvNABXXyhOCw t3yk1jpMK1zCxkMpi4NesdY2sgLgKxE3kvcYdyaiW4qF+YyvPw2F9u+rf/h8IFumJPBr btUKe8L9yv95+MDtnC3TtFoZUc9AoBfDEviK6tfxRVh3e6I7xsVuUG4Y4rVP+3EfZgLn wwmMcZgd7Fe1YWkWM0KrANKrhmlslOoSvOZyKEtZVljyVsB9KIMqHfezygk0HhMXE1Fn QdEE0W/8lVBYlUBYN6HbgQVlQC7OauqF3upZReHQv6Qdmu0L7Dp9pRmxM/K99oZKzmNX AVTg== 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=rdCmWq9zxuWmGFMg5JjBmDBXnZoUlT/mh06bYjG+Y50=; b=v70bd7GXgMdKPlaKQ8haqJUF23az6GnXfCUmMB/BNPV2btgxTzRoRJtZv4Lrkc05S0 CAnRoIAYOu23WmcO4R4c8D/AiPPvCYmXJKuC6eoUVKlxkyF5B1bZ/xnjzyOhsOt73pbj x41Za8e2H3UePdK5/5+QqdoSkX2wH7K36LmchRjhKtu0UXWSvhg8zDI1itKeZygFETvt aKdSXpKxPjfbyPKK17onjJ+CFt/pucPEbx6TIen3UdyhCUedoD6wFiW/IK/XGcFd0tbl fgDskbJBOR2V42S1JKKfNQnBKQUEdcAxabYFfwO+b7Nd5nRbdSgRFv4yi2b3MOnMQ8iQ vujg== X-Gm-Message-State: AOAM531u7k7p/AMxfyBwZJ2UrxXRldx8ejx5DeFgeSGl/+RsuGOExVM5 Ba/SxVRMqVLRF3YBtqH60QgefYQXXB8yQmZuNoo= X-Received: by 2002:a25:df0a:0:b0:648:6364:a150 with SMTP id w10-20020a25df0a000000b006486364a150mr9128926ybg.381.1652530238541; Sat, 14 May 2022 05:10:38 -0700 (PDT) MIME-Version: 1.0 References: <20220512182921.193462-1-max@enpas.org> <20220514130430.44a2aa21.max@enpas.org> In-Reply-To: <20220514130430.44a2aa21.max@enpas.org> From: Vincent Mailhol Date: Sat, 14 May 2022 21:10:27 +0900 Message-ID: Subject: Re: [PATCH v6] can, tty: can327 CAN/ldisc driver for ELM327 based OBD-II adapters To: Max Staudt Cc: Wolfgang Grandegger , Marc Kleine-Budde , linux-can@vger.kernel.org, Greg Kroah-Hartman , Oliver Neukum , linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,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 lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri. 14 May 2022 at 20:04, Max Staudt wrote: > On Fri, 13 May 2022 11:38:31 +0900 > Vincent Mailhol wrote: > > > +/* Compare buffer to string length, then compare buffer to fixed > > > string. > > > + * This ensures two things: > > > + * - It flags cases where the fixed string is only the start of > > > the > > > + * buffer, rather than exactly all of it. > > > + * - It avoids byte comparisons in case the length doesn't match. > > > + * > > > + * strncmp() cannot be used here because it accepts the following > > > wrong case: > > > + * strncmp("CAN ER", "CAN ERROR", 6); > > > > What about: > > strncmp("CAN ER", "CAN ERROR", 7); > > ? > > NAK, because this may overread the buffer by one byte (the NUL byte). > I am comparing naked bytes, not NUL-terminated strings. Right, I missed the fact that the first argument was not Null terminated. Your example is misleading: "CAN ER" is a string literal which is NULL terminated, it doesn't reflect the use case. My suggestion: first rename the function to reflect the feature it brings. For example: elm327_rxbuff_cmp(). Naming it as if it was a library is also misleading. Also make it return bool. For example, I would write it like in this fashion: /* * elm327_rxfuff_cmp - compare received buffer against expected error message * @rxbuff: received buffer. Not NUL-terminated. * @rxbuff_len: size of @rxbuff. * @err_msg: error message against which we compare. Must be NUL-terminated. * * This function flags cases where the @rxbuff is only the start of @err_msg * rather than exactly all of it. */ static inline bool elm327_rxbuff_cmp(const u8 *rxbuff, size_t rxbuff_len, const char *err_msg) { size_t err_len = strlen(err_msg); return (rxbuff_len == err_len) && !memcmp(rxbuff, err_msg, rxbuff_len); } Naming the arguments instead of using generic terms such as buffer and string make it easier to follow what you are doing. The important message is that @rxbuff is not terminated. With this information, it becomes clear that the string functions can not be used in replacement, no need to explicitly tell it. [...] Other answers are OK.