From: Yu Watanabe Date: Fri, 25 Jul 2025 18:38:56 +0000 (+0900) Subject: fs-util: avoid overflow in MODE_TO_PTR() with MODE_INVALID X-Git-Tag: v258-rc2~81^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F38341%2Fhead;p=thirdparty%2Fsystemd.git fs-util: avoid overflow in MODE_TO_PTR() with MODE_INVALID Note, currently MODE_TO_PTR() and PTR_TO_MODE() are only used in src/udev/udev-rules.c . Fixes CID#1548060. --- diff --git a/src/basic/fs-util.h b/src/basic/fs-util.h index b04fe71f037..74c14115561 100644 --- a/src/basic/fs-util.h +++ b/src/basic/fs-util.h @@ -6,8 +6,12 @@ /* The following macros add 1 when converting things, since 0 is a valid mode, while the pointer * NULL is special */ -#define PTR_TO_MODE(p) ((mode_t) ((uintptr_t) (p)-1)) -#define MODE_TO_PTR(u) ((void *) ((uintptr_t) (u)+1)) +static inline mode_t PTR_TO_MODE(void *p) { + return p ? (mode_t) ((uintptr_t) p - 1) : MODE_INVALID; +} +static inline void* MODE_TO_PTR(mode_t m) { + return m == MODE_INVALID ? NULL : (void *) ((uintptr_t) m + 1); +} int rmdir_parents(const char *path, const char *stop);