[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Stable-9.0.1 12/44] hw/ufs: Fix buffer overflow bug
From: |
Michael Tokarev |
Subject: |
[Stable-9.0.1 12/44] hw/ufs: Fix buffer overflow bug |
Date: |
Mon, 27 May 2024 11:21:03 +0300 |
From: Jeuk Kim <jeuk20.kim@samsung.com>
It fixes the buffer overflow vulnerability in the ufs device.
The bug was detected by sanitizers.
You can reproduce it by:
cat << EOF |\
qemu-system-x86_64 \
-display none -machine accel=qtest -m 512M -M q35 -nodefaults -drive \
file=null-co://,if=none,id=disk0 -device ufs,id=ufs_bus -device \
ufs-lu,drive=disk0,bus=ufs_bus -qtest stdio
outl 0xcf8 0x80000810
outl 0xcfc 0xe0000000
outl 0xcf8 0x80000804
outw 0xcfc 0x06
write 0xe0000058 0x1 0xa7
write 0xa 0x1 0x50
EOF
Resolves: #2299
Fixes: 329f16624499 ("hw/ufs: Support for Query Transfer Requests")
Reported-by: Zheyu Ma <zheyuma97@gmail.com>
Signed-off-by: Jeuk Kim <jeuk20.kim@samsung.com>
(cherry picked from commit f2c8aeb1afefcda92054c448b21fc59cdd99db30)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
diff --git a/hw/ufs/ufs.c b/hw/ufs/ufs.c
index eccdb852a0..bac78a32bb 100644
--- a/hw/ufs/ufs.c
+++ b/hw/ufs/ufs.c
@@ -126,6 +126,10 @@ static MemTxResult ufs_dma_read_req_upiu(UfsRequest *req)
copy_size = sizeof(UtpUpiuHeader) + UFS_TRANSACTION_SPECIFIC_FIELD_SIZE +
data_segment_length;
+ if (copy_size > sizeof(req->req_upiu)) {
+ copy_size = sizeof(req->req_upiu);
+ }
+
ret = ufs_addr_read(u, req_upiu_base_addr, &req->req_upiu, copy_size);
if (ret) {
trace_ufs_err_dma_read_req_upiu(req->slot, req_upiu_base_addr);
@@ -225,6 +229,10 @@ static MemTxResult ufs_dma_write_rsp_upiu(UfsRequest *req)
copy_size = rsp_upiu_byte_len;
}
+ if (copy_size > sizeof(req->rsp_upiu)) {
+ copy_size = sizeof(req->rsp_upiu);
+ }
+
ret = ufs_addr_write(u, rsp_upiu_base_addr, &req->rsp_upiu, copy_size);
if (ret) {
trace_ufs_err_dma_write_rsp_upiu(req->slot, rsp_upiu_base_addr);
--
2.39.2
- [Stable-9.0.1 00/44] Patch Round-up for stable 9.0.1, freeze on 2024-06-07, Michael Tokarev, 2024/05/27
- [Stable-9.0.1 01/44] migration/colo: Fix bdrv_graph_rdlock_main_loop: Assertion `!qemu_in_coroutine()' failed., Michael Tokarev, 2024/05/27
- [Stable-9.0.1 07/44] target/loongarch/cpu.c: typo fix: expection, Michael Tokarev, 2024/05/27
- [Stable-9.0.1 04/44] nbd/server: do not poll within a coroutine context, Michael Tokarev, 2024/05/27
- [Stable-9.0.1 03/44] docs: i386: pc: Update maximum CPU numbers for PC Q35, Michael Tokarev, 2024/05/27
- [Stable-9.0.1 05/44] nbd/server: Mark negotiation functions as coroutine_fn, Michael Tokarev, 2024/05/27
- [Stable-9.0.1 09/44] target/arm: Restrict translation disabled alignment check to VMSA, Michael Tokarev, 2024/05/27
- [Stable-9.0.1 12/44] hw/ufs: Fix buffer overflow bug,
Michael Tokarev <=
- [Stable-9.0.1 11/44] .gitlab-ci.d/cirrus.yml: Shorten the runtime of the macOS and FreeBSD jobs, Michael Tokarev, 2024/05/27
- [Stable-9.0.1 14/44] hw/arm/npcm7xx: Store derivative OTP fuse key in little endian, Michael Tokarev, 2024/05/27
- [Stable-9.0.1 08/44] target/riscv/kvm: remove sneaky strerrorname_np() instance, Michael Tokarev, 2024/05/27
- [Stable-9.0.1 10/44] tests/avocado: update sunxi kernel from armbian to 6.6.16, Michael Tokarev, 2024/05/27
- [Stable-9.0.1 20/44] target/sparc: Fix FMUL8x16, Michael Tokarev, 2024/05/27
- [Stable-9.0.1 19/44] target/sparc: Fix FEXPAND, Michael Tokarev, 2024/05/27
- [Stable-9.0.1 21/44] target/sparc: Fix FMUL8x16A{U,L}, Michael Tokarev, 2024/05/27
- [Stable-9.0.1 02/44] linux-user: do_setsockopt: fix SOL_ALG.ALG_SET_KEY, Michael Tokarev, 2024/05/27
- [Stable-9.0.1 06/44] backends/cryptodev-builtin: Fix local_error leaks, Michael Tokarev, 2024/05/27
- [Stable-9.0.1 15/44] target/sh4: Fix ADDV opcode, Michael Tokarev, 2024/05/27