Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

selftests: ublk: fix overflow in ublk_queue_auto_zc_fallback()

The functions ublk_queue_use_zc(), ublk_queue_use_auto_zc(), and
ublk_queue_auto_zc_fallback() were returning int, but performing
bitwise AND on q->flags which is __u64.

When a flag bit is set in the upper 32 bits (beyond INT_MAX), the
result of the bitwise AND operation could overflow when cast to int,
leading to incorrect boolean evaluation.

For example, if UBLKS_Q_AUTO_BUF_REG_FALLBACK is 0x8000000000000000:
- (u64)flags & 0x8000000000000000 = 0x8000000000000000
- Cast to int: undefined behavior / incorrect value
- Used in if(): may evaluate incorrectly

Fix by:
1. Changing return type from int to bool for semantic correctness
2. Using !! to explicitly convert to boolean (0 or 1)

This ensures the functions return proper boolean values regardless
of which bit position the flags occupy in the 64-bit field.

Fixes: c3a6d48f86da ("selftests: ublk: remove ublk queue self-defined flags")
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Ming Lei and committed by
Jens Axboe
9637fc3b d9f514d3

+6 -6
+6 -6
tools/testing/selftests/ublk/kublk.h
··· 390 390 return --io->tgt_ios == 0; 391 391 } 392 392 393 - static inline int ublk_queue_use_zc(const struct ublk_queue *q) 393 + static inline bool ublk_queue_use_zc(const struct ublk_queue *q) 394 394 { 395 - return q->flags & UBLK_F_SUPPORT_ZERO_COPY; 395 + return !!(q->flags & UBLK_F_SUPPORT_ZERO_COPY); 396 396 } 397 397 398 - static inline int ublk_queue_use_auto_zc(const struct ublk_queue *q) 398 + static inline bool ublk_queue_use_auto_zc(const struct ublk_queue *q) 399 399 { 400 - return q->flags & UBLK_F_AUTO_BUF_REG; 400 + return !!(q->flags & UBLK_F_AUTO_BUF_REG); 401 401 } 402 402 403 - static inline int ublk_queue_auto_zc_fallback(const struct ublk_queue *q) 403 + static inline bool ublk_queue_auto_zc_fallback(const struct ublk_queue *q) 404 404 { 405 - return q->flags & UBLKS_Q_AUTO_BUF_REG_FALLBACK; 405 + return !!(q->flags & UBLKS_Q_AUTO_BUF_REG_FALLBACK); 406 406 } 407 407 408 408 static inline int ublk_queue_no_buf(const struct ublk_queue *q)