From: David Howells Date: Thu, 23 Jul 2020 10:52:08 +0000 (+0100) Subject: watch_queue: Make watch_sizeof() check record size X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=1d9e4c6f197d194ec35c75ffffd9be0b1559deb7;p=users%2Fhch%2Fblock.git watch_queue: Make watch_sizeof() check record size Make watch_sizeof() give a build error if the size of the struct won't fit into the size field in the header. Reported-by: Miklos Szeredi Signed-off-by: David Howells --- diff --git a/include/linux/watch_queue.h b/include/linux/watch_queue.h index 5e08db2adc31..38e04c7a7951 100644 --- a/include/linux/watch_queue.h +++ b/include/linux/watch_queue.h @@ -120,7 +120,12 @@ static inline void remove_watch_list(struct watch_list *wlist, u64 id) * watch_sizeof - Calculate the information part of the size of a watch record, * given the structure size. */ -#define watch_sizeof(STRUCT) (sizeof(STRUCT) << WATCH_INFO_LENGTH__SHIFT) +#define watch_sizeof(STRUCT) \ + ({ \ + size_t max = WATCH_INFO_LENGTH >> WATCH_INFO_LENGTH__SHIFT; \ + BUILD_BUG_ON(sizeof(STRUCT) > max); \ + sizeof(STRUCT) << WATCH_INFO_LENGTH__SHIFT; \ + }) #endif