Thread (3 messages) flat view 3 messages, 3 authors, 2021-03-31

Re: [PATCH v2] net/rds: Fix a use after free in rds_message_map_pages

From: Haakon Bugge <hidden>
Date: 2021-03-31 18:27:11
Also in: linux-rdma, lkml

On 31 Mar 2021, at 03:59, Lv Yunlong [off-list ref] wrote:

In rds_message_map_pages, the rm is freed by rds_message_put(rm).
But rm is still used by rm->data.op_sg in return value.

My patch assigns ERR_CAST(rm->data.op_sg) to err before the rm is
freed to avoid the uaf.

Fixes: 7dba92037baf3 ("net/rds: Use ERR_PTR for rds_message_alloc_sgs()")
Signed-off-by: Lv Yunlong <redacted>
Reviewed-by: Håkon Bugge <redacted>


Thanks for fixing this:-)

Håkon

quoted hunk ↗ jump to hunk
---
net/rds/message.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/rds/message.c b/net/rds/message.c
index 071a261fdaab..799034e0f513 100644
--- a/net/rds/message.c
+++ b/net/rds/message.c
@@ -347,8 +347,9 @@ struct rds_message *rds_message_map_pages(unsigned long *page_addrs, unsigned in
	rm->data.op_nents = DIV_ROUND_UP(total_len, PAGE_SIZE);
	rm->data.op_sg = rds_message_alloc_sgs(rm, num_sgs);
	if (IS_ERR(rm->data.op_sg)) {
+		void *err = ERR_CAST(rm->data.op_sg);
		rds_message_put(rm);
-		return ERR_CAST(rm->data.op_sg);
+		return err;
	}

	for (i = 0; i < rm->data.op_nents; ++i) {
-- 
2.25.1
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help