* [PATCH 0/3] Fixes for syzbot problem
@ 2022-08-22 1:16 yanjun.zhu
2022-08-22 1:16 ` [PATCH 1/3] RDMA/rxe: Fix "kernel NULL pointer dereference" error yanjun.zhu
` (4 more replies)
0 siblings, 5 replies; 12+ messages in thread
From: yanjun.zhu @ 2022-08-22 1:16 UTC (permalink / raw)
To: jgg, leon, linux-rdma, yanjun.zhu, zyjzyj2000
From: Zhu Yanjun <yanjun.zhu@linux.dev>
In the link:
https://syzkaller.appspot.com/bug?id=3efca8275142fbfdde6cf77e1b18b1d5c6794d76
a rxe problem occurred. I tried to reproduce this problem in local hosts.
Finally I could reproduce this problem in local hosts.
The commit ("RDMA/rxe: Fix "kernel NULL pointer dereference" error") tries to
fix this problem.
After this syzbot problem disappeared, another problem appeared
when qp->sk failed to initialized.
The commit ("RDMA/rxe: Fix the error caused by qp->sk") tries to solve
this problem.
When I delved into the source code to solve the above problems, I found
that the member variable obj in struct rxe_task is not needed. So the
commit ("RDMA/rxe: Remove the unused variable obj") removes this
variable obj.
After the 3 commits, in locat hosts, the whole system can work well.
Zhu Yanjun (3):
RDMA/rxe: Fix "kernel NULL pointer dereference" error
RDMA/rxe: Fix the error caused by qp->sk
RDMA/rxe: Remove the unused variable obj
drivers/infiniband/sw/rxe/rxe_qp.c | 16 ++++++++++------
drivers/infiniband/sw/rxe/rxe_task.c | 3 +--
drivers/infiniband/sw/rxe/rxe_task.h | 3 +--
3 files changed, 12 insertions(+), 10 deletions(-)
--
2.31.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/3] RDMA/rxe: Fix "kernel NULL pointer dereference" error
2022-08-22 1:16 [PATCH 0/3] Fixes for syzbot problem yanjun.zhu
@ 2022-08-22 1:16 ` yanjun.zhu
2022-08-22 19:00 ` Bob Pearson
2022-08-22 1:16 ` [PATCH 2/3] RDMA/rxe: Fix the error caused by qp->sk yanjun.zhu
` (3 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: yanjun.zhu @ 2022-08-22 1:16 UTC (permalink / raw)
To: jgg, leon, linux-rdma, yanjun.zhu, zyjzyj2000; +Cc: syzbot+ab99dc4c6e961eed8b8e
From: Zhu Yanjun <yanjun.zhu@linux.dev>
When rxe_queue_init in the function rxe_qp_init_req fails,
both qp->req.task.func and qp->req.task.arg are not initialized.
Because of creation of qp fails, the function rxe_create_qp will
call rxe_qp_do_cleanup to handle allocated resource.
Before calling __rxe_do_task, both qp->req.task.func and
qp->req.task.arg should be checked.
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Reported-by: syzbot+ab99dc4c6e961eed8b8e@syzkaller.appspotmail.com
Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
---
drivers/infiniband/sw/rxe/rxe_qp.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
index 516bf9b95e48..f10b461b9963 100644
--- a/drivers/infiniband/sw/rxe/rxe_qp.c
+++ b/drivers/infiniband/sw/rxe/rxe_qp.c
@@ -797,7 +797,9 @@ static void rxe_qp_do_cleanup(struct work_struct *work)
rxe_cleanup_task(&qp->comp.task);
/* flush out any receive wr's or pending requests */
- __rxe_do_task(&qp->req.task);
+ if (qp->req.task.func && qp->req.task.arg)
+ __rxe_do_task(&qp->req.task);
+
if (qp->sq.queue) {
__rxe_do_task(&qp->comp.task);
__rxe_do_task(&qp->req.task);
--
2.31.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/3] RDMA/rxe: Fix the error caused by qp->sk
2022-08-22 1:16 [PATCH 0/3] Fixes for syzbot problem yanjun.zhu
2022-08-22 1:16 ` [PATCH 1/3] RDMA/rxe: Fix "kernel NULL pointer dereference" error yanjun.zhu
@ 2022-08-22 1:16 ` yanjun.zhu
2022-08-22 19:01 ` Bob Pearson
2022-08-22 1:16 ` [PATCH 3/3] RDMA/rxe: Remove the unused variable obj yanjun.zhu
` (2 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: yanjun.zhu @ 2022-08-22 1:16 UTC (permalink / raw)
To: jgg, leon, linux-rdma, yanjun.zhu, zyjzyj2000
From: Zhu Yanjun <yanjun.zhu@linux.dev>
When sock_create_kern in the function rxe_qp_init_req fails,
qp->sk is set to NULL.
Then the function rxe_create_qp will call rxe_qp_do_cleanup
to handle allocated resource.
Before handling qp->sk, this variable should be checked.
Fixes: 8700e3e7c485 ("Soft RoCE driver")
Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
---
drivers/infiniband/sw/rxe/rxe_qp.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
index f10b461b9963..b229052ae91a 100644
--- a/drivers/infiniband/sw/rxe/rxe_qp.c
+++ b/drivers/infiniband/sw/rxe/rxe_qp.c
@@ -835,8 +835,10 @@ static void rxe_qp_do_cleanup(struct work_struct *work)
free_rd_atomic_resources(qp);
- kernel_sock_shutdown(qp->sk, SHUT_RDWR);
- sock_release(qp->sk);
+ if (qp->sk) {
+ kernel_sock_shutdown(qp->sk, SHUT_RDWR);
+ sock_release(qp->sk);
+ }
}
/* called when the last reference to the qp is dropped */
--
2.31.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/3] RDMA/rxe: Remove the unused variable obj
2022-08-22 1:16 [PATCH 0/3] Fixes for syzbot problem yanjun.zhu
2022-08-22 1:16 ` [PATCH 1/3] RDMA/rxe: Fix "kernel NULL pointer dereference" error yanjun.zhu
2022-08-22 1:16 ` [PATCH 2/3] RDMA/rxe: Fix the error caused by qp->sk yanjun.zhu
@ 2022-08-22 1:16 ` yanjun.zhu
2022-08-22 19:06 ` Bob Pearson
2022-08-29 14:59 ` [PATCH 0/3] Fixes for syzbot problem Yanjun Zhu
2022-08-31 6:54 ` Leon Romanovsky
4 siblings, 1 reply; 12+ messages in thread
From: yanjun.zhu @ 2022-08-22 1:16 UTC (permalink / raw)
To: jgg, leon, linux-rdma, yanjun.zhu, zyjzyj2000
From: Zhu Yanjun <yanjun.zhu@linux.dev>
The member variable obj in struct rxe_task is not needed.
So remove it to save memory.
Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
---
drivers/infiniband/sw/rxe/rxe_qp.c | 6 +++---
drivers/infiniband/sw/rxe/rxe_task.c | 3 +--
drivers/infiniband/sw/rxe/rxe_task.h | 3 +--
3 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
index b229052ae91a..ee4f7a4a7e01 100644
--- a/drivers/infiniband/sw/rxe/rxe_qp.c
+++ b/drivers/infiniband/sw/rxe/rxe_qp.c
@@ -242,9 +242,9 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp,
skb_queue_head_init(&qp->req_pkts);
- rxe_init_task(rxe, &qp->req.task, qp,
+ rxe_init_task(&qp->req.task, qp,
rxe_requester, "req");
- rxe_init_task(rxe, &qp->comp.task, qp,
+ rxe_init_task(&qp->comp.task, qp,
rxe_completer, "comp");
qp->qp_timeout_jiffies = 0; /* Can't be set for UD/UC in modify_qp */
@@ -292,7 +292,7 @@ static int rxe_qp_init_resp(struct rxe_dev *rxe, struct rxe_qp *qp,
skb_queue_head_init(&qp->resp_pkts);
- rxe_init_task(rxe, &qp->resp.task, qp,
+ rxe_init_task(&qp->resp.task, qp,
rxe_responder, "resp");
qp->resp.opcode = OPCODE_NONE;
diff --git a/drivers/infiniband/sw/rxe/rxe_task.c b/drivers/infiniband/sw/rxe/rxe_task.c
index 2248cf33d776..ec2b7de1c497 100644
--- a/drivers/infiniband/sw/rxe/rxe_task.c
+++ b/drivers/infiniband/sw/rxe/rxe_task.c
@@ -94,10 +94,9 @@ void rxe_do_task(struct tasklet_struct *t)
task->ret = ret;
}
-int rxe_init_task(void *obj, struct rxe_task *task,
+int rxe_init_task(struct rxe_task *task,
void *arg, int (*func)(void *), char *name)
{
- task->obj = obj;
task->arg = arg;
task->func = func;
snprintf(task->name, sizeof(task->name), "%s", name);
diff --git a/drivers/infiniband/sw/rxe/rxe_task.h b/drivers/infiniband/sw/rxe/rxe_task.h
index 11d183fd3338..7f612a1c68a7 100644
--- a/drivers/infiniband/sw/rxe/rxe_task.h
+++ b/drivers/infiniband/sw/rxe/rxe_task.h
@@ -19,7 +19,6 @@ enum {
* called again.
*/
struct rxe_task {
- void *obj;
struct tasklet_struct tasklet;
int state;
spinlock_t state_lock; /* spinlock for task state */
@@ -35,7 +34,7 @@ struct rxe_task {
* arg => parameter to pass to fcn
* func => function to call until it returns != 0
*/
-int rxe_init_task(void *obj, struct rxe_task *task,
+int rxe_init_task(struct rxe_task *task,
void *arg, int (*func)(void *), char *name);
/* cleanup task */
--
2.31.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] RDMA/rxe: Fix "kernel NULL pointer dereference" error
2022-08-22 1:16 ` [PATCH 1/3] RDMA/rxe: Fix "kernel NULL pointer dereference" error yanjun.zhu
@ 2022-08-22 19:00 ` Bob Pearson
2022-08-23 5:43 ` lizhijian
0 siblings, 1 reply; 12+ messages in thread
From: Bob Pearson @ 2022-08-22 19:00 UTC (permalink / raw)
To: yanjun.zhu, jgg, leon, linux-rdma, zyjzyj2000; +Cc: syzbot+ab99dc4c6e961eed8b8e
On 8/21/22 20:16, yanjun.zhu@linux.dev wrote:
> From: Zhu Yanjun <yanjun.zhu@linux.dev>
>
> When rxe_queue_init in the function rxe_qp_init_req fails,
> both qp->req.task.func and qp->req.task.arg are not initialized.
>
> Because of creation of qp fails, the function rxe_create_qp will
> call rxe_qp_do_cleanup to handle allocated resource.
>
> Before calling __rxe_do_task, both qp->req.task.func and
> qp->req.task.arg should be checked.
>
> Fixes: 8700e3e7c485 ("Soft RoCE driver")
> Reported-by: syzbot+ab99dc4c6e961eed8b8e@syzkaller.appspotmail.com
> Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
> ---
> drivers/infiniband/sw/rxe/rxe_qp.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
> index 516bf9b95e48..f10b461b9963 100644
> --- a/drivers/infiniband/sw/rxe/rxe_qp.c
> +++ b/drivers/infiniband/sw/rxe/rxe_qp.c
> @@ -797,7 +797,9 @@ static void rxe_qp_do_cleanup(struct work_struct *work)
> rxe_cleanup_task(&qp->comp.task);
>
> /* flush out any receive wr's or pending requests */
> - __rxe_do_task(&qp->req.task);
> + if (qp->req.task.func && qp->req.task.arg)
func would be enough since they get set together. But, this is still fine since not performance critical.
> + __rxe_do_task(&qp->req.task);
> +
> if (qp->sq.queue) {
> __rxe_do_task(&qp->comp.task);
> __rxe_do_task(&qp->req.task);
Reviewed-by: Bob Pearson <rpearsonhpe@gmail.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] RDMA/rxe: Fix the error caused by qp->sk
2022-08-22 1:16 ` [PATCH 2/3] RDMA/rxe: Fix the error caused by qp->sk yanjun.zhu
@ 2022-08-22 19:01 ` Bob Pearson
2022-08-23 5:53 ` lizhijian
0 siblings, 1 reply; 12+ messages in thread
From: Bob Pearson @ 2022-08-22 19:01 UTC (permalink / raw)
To: yanjun.zhu, jgg, leon, linux-rdma, zyjzyj2000
On 8/21/22 20:16, yanjun.zhu@linux.dev wrote:
> From: Zhu Yanjun <yanjun.zhu@linux.dev>
>
> When sock_create_kern in the function rxe_qp_init_req fails,
> qp->sk is set to NULL.
>
> Then the function rxe_create_qp will call rxe_qp_do_cleanup
> to handle allocated resource.
>
> Before handling qp->sk, this variable should be checked.
>
> Fixes: 8700e3e7c485 ("Soft RoCE driver")
> Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
> ---
> drivers/infiniband/sw/rxe/rxe_qp.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
> index f10b461b9963..b229052ae91a 100644
> --- a/drivers/infiniband/sw/rxe/rxe_qp.c
> +++ b/drivers/infiniband/sw/rxe/rxe_qp.c
> @@ -835,8 +835,10 @@ static void rxe_qp_do_cleanup(struct work_struct *work)
>
> free_rd_atomic_resources(qp);
>
> - kernel_sock_shutdown(qp->sk, SHUT_RDWR);
> - sock_release(qp->sk);
> + if (qp->sk) {
> + kernel_sock_shutdown(qp->sk, SHUT_RDWR);
> + sock_release(qp->sk);
> + }
> }
>
> /* called when the last reference to the qp is dropped */
Reviewed-by: Bob Pearson <rpearsonhpe@gmail.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] RDMA/rxe: Remove the unused variable obj
2022-08-22 1:16 ` [PATCH 3/3] RDMA/rxe: Remove the unused variable obj yanjun.zhu
@ 2022-08-22 19:06 ` Bob Pearson
2022-08-23 5:54 ` lizhijian
0 siblings, 1 reply; 12+ messages in thread
From: Bob Pearson @ 2022-08-22 19:06 UTC (permalink / raw)
To: yanjun.zhu, jgg, leon, linux-rdma, zyjzyj2000
On 8/21/22 20:16, yanjun.zhu@linux.dev wrote:
> From: Zhu Yanjun <yanjun.zhu@linux.dev>
>
> The member variable obj in struct rxe_task is not needed.
> So remove it to save memory.
>
> Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
> ---
> drivers/infiniband/sw/rxe/rxe_qp.c | 6 +++---
> drivers/infiniband/sw/rxe/rxe_task.c | 3 +--
> drivers/infiniband/sw/rxe/rxe_task.h | 3 +--
> 3 files changed, 5 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
> index b229052ae91a..ee4f7a4a7e01 100644
> --- a/drivers/infiniband/sw/rxe/rxe_qp.c
> +++ b/drivers/infiniband/sw/rxe/rxe_qp.c
> @@ -242,9 +242,9 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp,
>
> skb_queue_head_init(&qp->req_pkts);
>
> - rxe_init_task(rxe, &qp->req.task, qp,
> + rxe_init_task(&qp->req.task, qp,
> rxe_requester, "req");
> - rxe_init_task(rxe, &qp->comp.task, qp,
> + rxe_init_task(&qp->comp.task, qp,
> rxe_completer, "comp");
>
> qp->qp_timeout_jiffies = 0; /* Can't be set for UD/UC in modify_qp */
> @@ -292,7 +292,7 @@ static int rxe_qp_init_resp(struct rxe_dev *rxe, struct rxe_qp *qp,
>
> skb_queue_head_init(&qp->resp_pkts);
>
> - rxe_init_task(rxe, &qp->resp.task, qp,
> + rxe_init_task(&qp->resp.task, qp,
> rxe_responder, "resp");
>
> qp->resp.opcode = OPCODE_NONE;
> diff --git a/drivers/infiniband/sw/rxe/rxe_task.c b/drivers/infiniband/sw/rxe/rxe_task.c
> index 2248cf33d776..ec2b7de1c497 100644
> --- a/drivers/infiniband/sw/rxe/rxe_task.c
> +++ b/drivers/infiniband/sw/rxe/rxe_task.c
> @@ -94,10 +94,9 @@ void rxe_do_task(struct tasklet_struct *t)
> task->ret = ret;
> }
>
> -int rxe_init_task(void *obj, struct rxe_task *task,
> +int rxe_init_task(struct rxe_task *task,
> void *arg, int (*func)(void *), char *name)
> {
> - task->obj = obj;
> task->arg = arg;
> task->func = func;
> snprintf(task->name, sizeof(task->name), "%s", name);
> diff --git a/drivers/infiniband/sw/rxe/rxe_task.h b/drivers/infiniband/sw/rxe/rxe_task.h
> index 11d183fd3338..7f612a1c68a7 100644
> --- a/drivers/infiniband/sw/rxe/rxe_task.h
> +++ b/drivers/infiniband/sw/rxe/rxe_task.h
> @@ -19,7 +19,6 @@ enum {
> * called again.
> */
> struct rxe_task {
> - void *obj;
> struct tasklet_struct tasklet;
> int state;
> spinlock_t state_lock; /* spinlock for task state */
> @@ -35,7 +34,7 @@ struct rxe_task {
> * arg => parameter to pass to fcn
> * func => function to call until it returns != 0
> */
> -int rxe_init_task(void *obj, struct rxe_task *task,
> +int rxe_init_task(struct rxe_task *task,
> void *arg, int (*func)(void *), char *name);
>
> /* cleanup task */
Looks OK to me. Not sure why that was ever there.
Reviewed-by: Bob Pearson <rpearsonhpe@gmail.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] RDMA/rxe: Fix "kernel NULL pointer dereference" error
2022-08-22 19:00 ` Bob Pearson
@ 2022-08-23 5:43 ` lizhijian
0 siblings, 0 replies; 12+ messages in thread
From: lizhijian @ 2022-08-23 5:43 UTC (permalink / raw)
To: Bob Pearson, yanjun.zhu@linux.dev, jgg@ziepe.ca, leon@kernel.org,
linux-rdma@vger.kernel.org, zyjzyj2000@gmail.com
Cc: syzbot+ab99dc4c6e961eed8b8e@syzkaller.appspotmail.com
On 23/08/2022 03:00, Bob Pearson wrote:
> On 8/21/22 20:16, yanjun.zhu@linux.dev wrote:
>> From: Zhu Yanjun <yanjun.zhu@linux.dev>
>>
>> When rxe_queue_init in the function rxe_qp_init_req fails,
>> both qp->req.task.func and qp->req.task.arg are not initialized.
>>
>> Because of creation of qp fails, the function rxe_create_qp will
>> call rxe_qp_do_cleanup to handle allocated resource.
>>
>> Before calling __rxe_do_task, both qp->req.task.func and
>> qp->req.task.arg should be checked.
>>
>> Fixes: 8700e3e7c485 ("Soft RoCE driver")
>> Reported-by: syzbot+ab99dc4c6e961eed8b8e@syzkaller.appspotmail.com
>> Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
>> ---
>> drivers/infiniband/sw/rxe/rxe_qp.c | 4 +++-
>> 1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
>> index 516bf9b95e48..f10b461b9963 100644
>> --- a/drivers/infiniband/sw/rxe/rxe_qp.c
>> +++ b/drivers/infiniband/sw/rxe/rxe_qp.c
>> @@ -797,7 +797,9 @@ static void rxe_qp_do_cleanup(struct work_struct *work)
>> rxe_cleanup_task(&qp->comp.task);
>>
>> /* flush out any receive wr's or pending requests */
>> - __rxe_do_task(&qp->req.task);
>> + if (qp->req.task.func && qp->req.task.arg)
> func would be enough since they get set together.
Agreed
otherwise, looks good
Reviewed-by: Li Zhijian <lizhijian@fujitsu.com>
> But, this is still fine since not performance critical.
>> + __rxe_do_task(&qp->req.task);
>> +
>> if (qp->sq.queue) {
>> __rxe_do_task(&qp->comp.task);
>> __rxe_do_task(&qp->req.task);
> Reviewed-by: Bob Pearson <rpearsonhpe@gmail.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] RDMA/rxe: Fix the error caused by qp->sk
2022-08-22 19:01 ` Bob Pearson
@ 2022-08-23 5:53 ` lizhijian
0 siblings, 0 replies; 12+ messages in thread
From: lizhijian @ 2022-08-23 5:53 UTC (permalink / raw)
To: Bob Pearson, yanjun.zhu@linux.dev, jgg@ziepe.ca, leon@kernel.org,
linux-rdma@vger.kernel.org, zyjzyj2000@gmail.com
On 23/08/2022 03:01, Bob Pearson wrote:
> On 8/21/22 20:16, yanjun.zhu@linux.dev wrote:
>> From: Zhu Yanjun <yanjun.zhu@linux.dev>
>>
>> When sock_create_kern in the function rxe_qp_init_req fails,
>> qp->sk is set to NULL.
>>
>> Then the function rxe_create_qp will call rxe_qp_do_cleanup
>> to handle allocated resource.
>>
>> Before handling qp->sk, this variable should be checked.
>>
>> Fixes: 8700e3e7c485 ("Soft RoCE driver")
>> Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
Reviewed-by: Li Zhijian <lizhijian@fujitsu.com>
>> ---
>> drivers/infiniband/sw/rxe/rxe_qp.c | 6 ++++--
>> 1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
>> index f10b461b9963..b229052ae91a 100644
>> --- a/drivers/infiniband/sw/rxe/rxe_qp.c
>> +++ b/drivers/infiniband/sw/rxe/rxe_qp.c
>> @@ -835,8 +835,10 @@ static void rxe_qp_do_cleanup(struct work_struct *work)
>>
>> free_rd_atomic_resources(qp);
>>
>> - kernel_sock_shutdown(qp->sk, SHUT_RDWR);
>> - sock_release(qp->sk);
>> + if (qp->sk) {
>> + kernel_sock_shutdown(qp->sk, SHUT_RDWR);
>> + sock_release(qp->sk);
>> + }
>> }
>>
>> /* called when the last reference to the qp is dropped */
> Reviewed-by: Bob Pearson <rpearsonhpe@gmail.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] RDMA/rxe: Remove the unused variable obj
2022-08-22 19:06 ` Bob Pearson
@ 2022-08-23 5:54 ` lizhijian
0 siblings, 0 replies; 12+ messages in thread
From: lizhijian @ 2022-08-23 5:54 UTC (permalink / raw)
To: Bob Pearson, yanjun.zhu@linux.dev, jgg@ziepe.ca, leon@kernel.org,
linux-rdma@vger.kernel.org, zyjzyj2000@gmail.com
On 23/08/2022 03:06, Bob Pearson wrote:
> On 8/21/22 20:16, yanjun.zhu@linux.dev wrote:
>> From: Zhu Yanjun <yanjun.zhu@linux.dev>
>>
>> The member variable obj in struct rxe_task is not needed.
>> So remove it to save memory.
>>
>> Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
Reviewed-by: Li Zhijian <lizhijian@fujitsu.com>
>> ---
>> drivers/infiniband/sw/rxe/rxe_qp.c | 6 +++---
>> drivers/infiniband/sw/rxe/rxe_task.c | 3 +--
>> drivers/infiniband/sw/rxe/rxe_task.h | 3 +--
>> 3 files changed, 5 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c
>> index b229052ae91a..ee4f7a4a7e01 100644
>> --- a/drivers/infiniband/sw/rxe/rxe_qp.c
>> +++ b/drivers/infiniband/sw/rxe/rxe_qp.c
>> @@ -242,9 +242,9 @@ static int rxe_qp_init_req(struct rxe_dev *rxe, struct rxe_qp *qp,
>>
>> skb_queue_head_init(&qp->req_pkts);
>>
>> - rxe_init_task(rxe, &qp->req.task, qp,
>> + rxe_init_task(&qp->req.task, qp,
>> rxe_requester, "req");
>> - rxe_init_task(rxe, &qp->comp.task, qp,
>> + rxe_init_task(&qp->comp.task, qp,
>> rxe_completer, "comp");
>>
>> qp->qp_timeout_jiffies = 0; /* Can't be set for UD/UC in modify_qp */
>> @@ -292,7 +292,7 @@ static int rxe_qp_init_resp(struct rxe_dev *rxe, struct rxe_qp *qp,
>>
>> skb_queue_head_init(&qp->resp_pkts);
>>
>> - rxe_init_task(rxe, &qp->resp.task, qp,
>> + rxe_init_task(&qp->resp.task, qp,
>> rxe_responder, "resp");
>>
>> qp->resp.opcode = OPCODE_NONE;
>> diff --git a/drivers/infiniband/sw/rxe/rxe_task.c b/drivers/infiniband/sw/rxe/rxe_task.c
>> index 2248cf33d776..ec2b7de1c497 100644
>> --- a/drivers/infiniband/sw/rxe/rxe_task.c
>> +++ b/drivers/infiniband/sw/rxe/rxe_task.c
>> @@ -94,10 +94,9 @@ void rxe_do_task(struct tasklet_struct *t)
>> task->ret = ret;
>> }
>>
>> -int rxe_init_task(void *obj, struct rxe_task *task,
>> +int rxe_init_task(struct rxe_task *task,
>> void *arg, int (*func)(void *), char *name)
>> {
>> - task->obj = obj;
>> task->arg = arg;
>> task->func = func;
>> snprintf(task->name, sizeof(task->name), "%s", name);
>> diff --git a/drivers/infiniband/sw/rxe/rxe_task.h b/drivers/infiniband/sw/rxe/rxe_task.h
>> index 11d183fd3338..7f612a1c68a7 100644
>> --- a/drivers/infiniband/sw/rxe/rxe_task.h
>> +++ b/drivers/infiniband/sw/rxe/rxe_task.h
>> @@ -19,7 +19,6 @@ enum {
>> * called again.
>> */
>> struct rxe_task {
>> - void *obj;
>> struct tasklet_struct tasklet;
>> int state;
>> spinlock_t state_lock; /* spinlock for task state */
>> @@ -35,7 +34,7 @@ struct rxe_task {
>> * arg => parameter to pass to fcn
>> * func => function to call until it returns != 0
>> */
>> -int rxe_init_task(void *obj, struct rxe_task *task,
>> +int rxe_init_task(struct rxe_task *task,
>> void *arg, int (*func)(void *), char *name);
>>
>> /* cleanup task */
> Looks OK to me. Not sure why that was ever there.
>
> Reviewed-by: Bob Pearson <rpearsonhpe@gmail.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 0/3] Fixes for syzbot problem
2022-08-22 1:16 [PATCH 0/3] Fixes for syzbot problem yanjun.zhu
` (2 preceding siblings ...)
2022-08-22 1:16 ` [PATCH 3/3] RDMA/rxe: Remove the unused variable obj yanjun.zhu
@ 2022-08-29 14:59 ` Yanjun Zhu
2022-08-31 6:54 ` Leon Romanovsky
4 siblings, 0 replies; 12+ messages in thread
From: Yanjun Zhu @ 2022-08-29 14:59 UTC (permalink / raw)
To: yanjun.zhu, jgg, leon, linux-rdma, zyjzyj2000
在 2022/8/22 9:16, yanjun.zhu@linux.dev 写道:
> From: Zhu Yanjun <yanjun.zhu@linux.dev>
>
> In the link:
>
> https://syzkaller.appspot.com/bug?id=3efca8275142fbfdde6cf77e1b18b1d5c6794d76
>
> a rxe problem occurred. I tried to reproduce this problem in local hosts.
> Finally I could reproduce this problem in local hosts.
> The commit ("RDMA/rxe: Fix "kernel NULL pointer dereference" error") tries to
> fix this problem.
>
> After this syzbot problem disappeared, another problem appeared
> when qp->sk failed to initialized.
> The commit ("RDMA/rxe: Fix the error caused by qp->sk") tries to solve
> this problem.
>
> When I delved into the source code to solve the above problems, I found
> that the member variable obj in struct rxe_task is not needed. So the
> commit ("RDMA/rxe: Remove the unused variable obj") removes this
> variable obj.
>
> After the 3 commits, in locat hosts, the whole system can work well.
>
> Zhu Yanjun (3):
Gently ping
Zhu Yanjun
> RDMA/rxe: Fix "kernel NULL pointer dereference" error
> RDMA/rxe: Fix the error caused by qp->sk
> RDMA/rxe: Remove the unused variable obj
>
> drivers/infiniband/sw/rxe/rxe_qp.c | 16 ++++++++++------
> drivers/infiniband/sw/rxe/rxe_task.c | 3 +--
> drivers/infiniband/sw/rxe/rxe_task.h | 3 +--
> 3 files changed, 12 insertions(+), 10 deletions(-)
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 0/3] Fixes for syzbot problem
2022-08-22 1:16 [PATCH 0/3] Fixes for syzbot problem yanjun.zhu
` (3 preceding siblings ...)
2022-08-29 14:59 ` [PATCH 0/3] Fixes for syzbot problem Yanjun Zhu
@ 2022-08-31 6:54 ` Leon Romanovsky
4 siblings, 0 replies; 12+ messages in thread
From: Leon Romanovsky @ 2022-08-31 6:54 UTC (permalink / raw)
To: yanjun.zhu; +Cc: jgg, linux-rdma, zyjzyj2000
On Sun, Aug 21, 2022 at 09:16:12PM -0400, yanjun.zhu@linux.dev wrote:
> From: Zhu Yanjun <yanjun.zhu@linux.dev>
>
> In the link:
>
> https://syzkaller.appspot.com/bug?id=3efca8275142fbfdde6cf77e1b18b1d5c6794d76
>
> a rxe problem occurred. I tried to reproduce this problem in local hosts.
> Finally I could reproduce this problem in local hosts.
> The commit ("RDMA/rxe: Fix "kernel NULL pointer dereference" error") tries to
> fix this problem.
>
> After this syzbot problem disappeared, another problem appeared
> when qp->sk failed to initialized.
> The commit ("RDMA/rxe: Fix the error caused by qp->sk") tries to solve
> this problem.
>
> When I delved into the source code to solve the above problems, I found
> that the member variable obj in struct rxe_task is not needed. So the
> commit ("RDMA/rxe: Remove the unused variable obj") removes this
> variable obj.
>
> After the 3 commits, in locat hosts, the whole system can work well.
>
> Zhu Yanjun (3):
> RDMA/rxe: Fix "kernel NULL pointer dereference" error
> RDMA/rxe: Fix the error caused by qp->sk
> RDMA/rxe: Remove the unused variable obj
Thanks, applied to -next with applied suggestion from Bob.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2022-08-31 6:54 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-22 1:16 [PATCH 0/3] Fixes for syzbot problem yanjun.zhu
2022-08-22 1:16 ` [PATCH 1/3] RDMA/rxe: Fix "kernel NULL pointer dereference" error yanjun.zhu
2022-08-22 19:00 ` Bob Pearson
2022-08-23 5:43 ` lizhijian
2022-08-22 1:16 ` [PATCH 2/3] RDMA/rxe: Fix the error caused by qp->sk yanjun.zhu
2022-08-22 19:01 ` Bob Pearson
2022-08-23 5:53 ` lizhijian
2022-08-22 1:16 ` [PATCH 3/3] RDMA/rxe: Remove the unused variable obj yanjun.zhu
2022-08-22 19:06 ` Bob Pearson
2022-08-23 5:54 ` lizhijian
2022-08-29 14:59 ` [PATCH 0/3] Fixes for syzbot problem Yanjun Zhu
2022-08-31 6:54 ` Leon Romanovsky
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox