Skip to content

Commit d271631

Browse files
Mikulas Patockagregkh
authored andcommitted
dm: fix a buffer overflow in ioctl processing
commit 2fa49cc upstream. Tony Asleson (using Claude) found a buffer overflow in dm-ioctl in the function retrieve_status: 1. The code in retrieve_status checks that the output string fits into the output buffer and writes the output string there 2. Then, the code aligns the "outptr" variable to the next 8-byte boundary: outptr = align_ptr(outptr); 3. The alignment doesn't check overflow, so outptr could point past the buffer end 4. The "for" loop is iterated again, it executes: remaining = len - (outptr - outbuf); 5. If "outptr" points past "outbuf + len", the arithmetics wraps around and the variable "remaining" contains unusually high number 6. With "remaining" being high, the code writes more data past the end of the buffer Luckily, this bug has no security implications because: 1. Only root can issue device mapper ioctls 2. The commonly used libraries that communicate with device mapper (libdevmapper and devicemapper-rs) use buffer size that is aligned to 8 bytes - thus, "outptr = align_ptr(outptr)" can't overshoot the input buffer and the bug can't happen accidentally Reported-by: Tony Asleson <tasleson@redhat.com> Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Reviewed-by: Bryn M. Reeves <bmr@redhat.com> Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent ac1b245 commit d271631

1 file changed

Lines changed: 4 additions & 0 deletions

File tree

drivers/md/dm-ioctl.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1341,6 +1341,10 @@ static void retrieve_status(struct dm_table *table,
13411341
used = param->data_start + (outptr - outbuf);
13421342

13431343
outptr = align_ptr(outptr);
1344+
if (!outptr || outptr > outbuf + len) {
1345+
param->flags |= DM_BUFFER_FULL_FLAG;
1346+
break;
1347+
}
13441348
spec->next = outptr - outbuf;
13451349
}
13461350

0 commit comments

Comments
 (0)