Re: [PATCH] RDMA/restrack: Fix potential invalid address access

From: Wenchao Hao
Date: Mon Mar 04 2024 - 08:34:46 EST


On 2024/3/4 15:35, Leon Romanovsky wrote:
On Mon, Mar 04, 2024 at 11:21:19AM +0800, Wenchao Hao wrote:
On 2024/3/3 20:57, Leon Romanovsky wrote:
On Fri, Mar 01, 2024 at 05:55:15PM +0800, Wenchao Hao wrote:
struct rdma_restrack_entry's kern_name was set to KBUILD_MODNAME
in ib_create_cq(), while if the module exited but forgot del this
rdma_restrack_entry, it would cause a invalid address access in
rdma_restrack_clean() when print the owner of this rdma_restrack_entry.

How is it possible to exit owner module without cleaning the resources?


I meet this issue with one of our product who develop their owner kernel
modules based on ib_core, and there are terrible logic with the exit
code which cause resource leak.

Of curse it's bug of module who did not clear resource when exit, but
I think ib_core should avoid accessing memory of other modules directly
to provides better stability.

What's more, from the context of rdma_restrack_clean() when print
"restack: %s %s object allocated by %s is not freed ...", it seems
designed for the above scene where client has bug to alerts there
are resource leak, so we should not panic on this log print.

Can you please share the kernel panic?


Sorry, there is no stack or panic info recorded. This is because
another issue of "printk". It seems printk would cause a deadlock
when printk access invalid address with our kernel.

Actually, I found this issue with ftrace/kprobe but not printk, that's
why it takes me a long time to address it.

BTW, I am not developer of rdma, after found the issue, I think it's
better to enhance, so send this patch, and the patch has been tested with
the origin scene.

Thanks