From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Wed, 31 May 2023 17:10:24 +0200 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by lore.white.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1q4NSz-004Ouy-A6 for lore@lore.pengutronix.de; Wed, 31 May 2023 17:10:23 +0200 Received: from localhost ([127.0.0.1] helo=metis.ext.pengutronix.de) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1q4NSv-0003OX-8M; Wed, 31 May 2023 17:10:21 +0200 Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q4NSs-0003Lj-Ne; Wed, 31 May 2023 17:10:18 +0200 Received: from [2a0a:edc0:0:1101:1d::54] (helo=dude05.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1q4NSs-00495L-2a; Wed, 31 May 2023 17:10:18 +0200 Received: from afa by dude05.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1q4NSr-005tJr-0y; Wed, 31 May 2023 17:10:17 +0200 From: Ahmad Fatoum To: oss-tools@pengutronix.de Date: Wed, 31 May 2023 17:10:13 +0200 Message-Id: <20230531151015.1404262-3-a.fatoum@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230531151015.1404262-1-a.fatoum@pengutronix.de> References: <20230531151015.1404262-1-a.fatoum@pengutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [OSS-Tools] [PATCH 3/5] libdt: use memcpy instead of strncpy X-BeenThere: oss-tools@pengutronix.de X-Mailman-Version: 2.1.29 Precedence: list List-Id: Pengutronix Public Open-Source-Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "OSS-Tools" X-SA-Exim-Connect-IP: 127.0.0.1 X-SA-Exim-Mail-From: oss-tools-bounces@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false Despite the name, GCC objects at the strncpy use in safe_strncpy on safety grounds. While that seems to be a false positive, we could just be using memcpy instead and side step this altogether. Signed-off-by: Ahmad Fatoum --- src/dt/common.h | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/src/dt/common.h b/src/dt/common.h index c3c4f53fc216..69a264cfc1a9 100644 --- a/src/dt/common.h +++ b/src/dt/common.h @@ -36,6 +36,12 @@ typedef uint64_t u64; #undef offsetof #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) +#define min(x, y) ({ \ + typeof(x) _min1 = (x); \ + typeof(y) _min2 = (y); \ + (void) (&_min1 == &_min2); \ + _min1 < _min2 ? _min1 : _min2; }) + struct device_d; void pr_level_set(int level); @@ -199,14 +205,6 @@ static inline size_t DT_strlcpy(char *dest, const char *src, size_t size) return ret; } -/* Like strncpy but make sure the resulting string is always 0 terminated. */ -static inline char * safe_strncpy(char *dst, const char *src, size_t size) -{ - if (!size) return dst; - dst[--size] = '\0'; - return strncpy(dst, src, size); -} - static inline char *xstrdup(const char *s) { char *p = strdup(s); @@ -415,21 +413,23 @@ static inline int dev_set_name(struct device_d *dev, const char *fmt, ...) { char newname[MAX_DRIVER_NAME]; va_list vargs; - int err; + int ret; va_start(vargs, fmt); - err = vsnprintf(newname, MAX_DRIVER_NAME, fmt, vargs); + ret = vsnprintf(newname, MAX_DRIVER_NAME, fmt, vargs); va_end(vargs); + if (WARN_ON(ret < 0)) + return ret; + /* * Copy new name into dev structure, we do this after vsnprintf call in * case old device name was in one of vargs */ - safe_strncpy(dev->name, newname, MAX_DRIVER_NAME); + memcpy(dev->name, newname, min(MAX_DRIVER_NAME - 1, ret)); + dev->name[MAX_DRIVER_NAME - 1] = '\0'; - WARN_ON(err < 0); - - return err; + return 0; } struct driver_d; @@ -577,12 +577,6 @@ static inline __u32 ror32(__u32 word, unsigned int shift) return (word >> shift) | (word << (32 - shift)); } -#define min(x, y) ({ \ - typeof(x) _min1 = (x); \ - typeof(y) _min2 = (y); \ - (void) (&_min1 == &_min2); \ - _min1 < _min2 ? _min1 : _min2; }) - /* * Helper macros to use CONFIG_ options in C expressions. Note that * these only work with boolean and tristate options. -- 2.39.2