logger: fix corner case in stdout mode 40/291640/1 accepted/tizen/unified/20230528.171026
authorMarek Szyprowski <m.szyprowski@samsung.com>
Wed, 19 Apr 2023 16:21:28 +0000 (18:21 +0200)
committerMarek Szyprowski <m.szyprowski@samsung.com>
Wed, 19 Apr 2023 16:21:28 +0000 (18:21 +0200)
commitbde6525a89e286b7a6693436120ac174be32f164
tree16c06ca4856419119e05ecf332087f28c30069bf
parentd6c1916377bc9d88317b1fa66b576a1852f50ab9
logger: fix corner case in stdout mode

Writing large messages via stdout API might trigger the following kernel
BUG:

usercopy: Kernel memory overwrite attempt detected to SLUB object 'kmalloc-4k' (offset 161, size 4062)!
------------[ cut here ]------------
kernel BUG at mm/usercopy.c:103!
Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
Modules linked in: r8168(O) pgdrv(O) machine_dlkm(O) wcd938x_slave_dlkm(O) wcd938x_dlkm(O) wcd9xxx_dlkm(O) tx_ma)
Process ros2 (pid: 10140, stack limit = 0xffffff80103e0000)
CPU: 7 PID: 10140 Comm: ros2 Tainted: G S         O      4.19.157-arm64-rb5 #1
Hardware name: Qualcomm Technologies, Inc. qrb5165 IOT RB5 (DT)
pstate: 40400005 (nZcv daif +PAN -UAO)
pc : usercopy_abort+0xac/0xb0
lr : usercopy_abort+0xac/0xb0
..
Call trace:
 usercopy_abort+0xac/0xb0
 __check_heap_object+0x14c/0x168
 __check_object_size.part.0+0x22c/0x410
 __check_object_size+0x48/0x58
 logger_write_iter+0x26c/0x5b8 [logger]
 __vfs_write+0x124/0x178
 vfs_write+0xb8/0x1d0
 ksys_write+0x74/0xe8
 __arm64_sys_write+0x24/0x30
 el0_svc_common.constprop.0+0x78/0x170
 el0_svc_handler+0x70/0x90
 el0_svc+0x8/0xc
Code: aa1403e3 9000e3a0 910c2000 97fa0b2f (d4210000)
---[ end trace 7bfe613c5072c5df ]---

Fix this by properly adjusting the size of the data-to-be-copied for the
next loop iteration.

Change-Id: I33cf8b37f4c18c943af9d1df27a19a3ba169ad03
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
kernel/logger.c