iouring: Disallow zero, or less CQ entries than SQ entries

Reported-by: syzbot+ad039a9d567cc9ba5ea8@syzkaller.appspotmail.com
PiperOrigin-RevId: 485230763
This commit is contained in:
Rahat Mahmood
2022-10-31 22:34:06 -07:00
committed by gVisor bot
parent 20ef2127a1
commit d4b159ae93
3 changed files with 18 additions and 2 deletions
+3 -2
View File
@@ -92,10 +92,11 @@ func New(ctx context.Context, vfsObj *vfs.VirtualFilesystem, entries uint32, par
}
var numCqEntries uint32
if params.Flags&linux.IORING_SETUP_CQSIZE != 0 {
if params.CqEntries > linux.IORING_MAX_CQ_ENTRIES {
var ok bool
numCqEntries, ok = roundUpPowerOfTwo(params.CqEntries)
if !ok || numCqEntries < numSqEntries || numCqEntries > linux.IORING_SETUP_CQSIZE {
return nil, linuxerr.EINVAL
}
numCqEntries = params.CqEntries
} else {
numCqEntries = 2 * numSqEntries
}
+14
View File
@@ -52,6 +52,20 @@ TEST(IOUringTest, ParamsNonZeroResv) {
ASSERT_THAT(IOUringSetup(1, &params), SyscallFailsWithErrno(EINVAL));
}
TEST(IOUringTest, ZeroCQEntries) {
IOUringParams params;
params.cq_entries = 0;
params.flags = IORING_SETUP_CQSIZE;
ASSERT_THAT(IOUringSetup(1, &params), SyscallFailsWithErrno(EINVAL));
}
TEST(IOUringTest, ZeroCQEntriesLessThanSQEntries) {
IOUringParams params;
params.cq_entries = 16;
params.flags = IORING_SETUP_CQSIZE;
ASSERT_THAT(IOUringSetup(32, &params), SyscallFailsWithErrno(EINVAL));
}
// Testing that io_uring_setup(2) fails with EINVAL on unsupported flags.
TEST(IOUringTest, UnsupportedFlags) {
if (IsRunningOnGvisor()) {
+1
View File
@@ -34,6 +34,7 @@ namespace testing {
// io_uring_setup(2) flags.
#define IORING_SETUP_SQPOLL (1U << 1)
#define IORING_SETUP_CQSIZE (1U << 3)
#define IORING_FEAT_SINGLE_MMAP (1U << 0)