Skip to content

Commit 9637fc3

Browse files
Ming Leiaxboe
authored andcommitted
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: c3a6d48 ("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>
1 parent d9f514d commit 9637fc3

1 file changed

Lines changed: 6 additions & 6 deletions

File tree

  • tools/testing/selftests/ublk

tools/testing/selftests/ublk/kublk.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -390,19 +390,19 @@ static inline int ublk_completed_tgt_io(struct ublk_thread *t,
390390
return --io->tgt_ios == 0;
391391
}
392392

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)
394394
{
395-
return q->flags & UBLK_F_SUPPORT_ZERO_COPY;
395+
return !!(q->flags & UBLK_F_SUPPORT_ZERO_COPY);
396396
}
397397

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)
399399
{
400-
return q->flags & UBLK_F_AUTO_BUF_REG;
400+
return !!(q->flags & UBLK_F_AUTO_BUF_REG);
401401
}
402402

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)
404404
{
405-
return q->flags & UBLKS_Q_AUTO_BUF_REG_FALLBACK;
405+
return !!(q->flags & UBLKS_Q_AUTO_BUF_REG_FALLBACK);
406406
}
407407

408408
static inline int ublk_queue_no_buf(const struct ublk_queue *q)

0 commit comments

Comments
 (0)