From: Dmitry Vyukov <firstname.lastname@example.org> To: Jason Gunthorpe <email@example.com> Cc: syzbot <firstname.lastname@example.org>, email@example.com, firstname.lastname@example.org, email@example.com, firstname.lastname@example.org, email@example.com, Aleksandr Nogikh <firstname.lastname@example.org> Subject: Re: [syzbot] KASAN: use-after-free Read in addr_handler (4) Date: Mon, 20 Sep 2021 10:13:10 +0200 [thread overview] Message-ID: <CACT4Y+aq+m8DkB+8Zvh0G5Ehmtd2kgapDr9eJEP0Mq5WLCOWMg@mail.gmail.com> (raw) In-Reply-To: <20210916162850.GQ3544071@ziepe.ca> On Thu, 16 Sept 2021 at 18:28, Jason Gunthorpe <email@example.com> wrote: > > On Thu, Sep 16, 2021 at 04:45:27PM +0200, Dmitry Vyukov wrote: > > > Answering your question re what was running concurrently with what. > > Each of the syscalls in these programs can run up to 2 times and > > ultimately any of these calls can race with any. Potentially syzkaller > > can predict values kernel will return (e.g. id's) before kernel > > actually returned them. I guess this does not restrict search area for > > the bug a lot... > > I have a reasonable theory now.. > > Based on the ops you provided this FSM sequence is possible > > RDMA_USER_CM_CMD_RESOLVE_IP > RDMA_CM_IDLE -> RDMA_CM_ADDR_QUERY > does rdma_resolve_ip(addr_handler) > > addr_handler > RDMA_CM_ADDR_QUERY -> RDMA_CM_ADDR_BOUND > [.. handler still running ..] > > RDMA_USER_CM_CMD_RESOLVE_IP > RDMA_CM_ADDR_BOUND -> RDMA_CM_ADDR_QUERY > does rdma_resolve_ip(addr_handler) > > RDMA_DESTROY_ID > rdma_addr_cancel() > > Which, if it happens fast enough, could trigger a situation where the > '&id_priv->id.route.addr.dev_addr' "handle" is in the req_list twice > beacause the addr_handler work queue hasn't yet got to the point of > deleting it from the req_list before the the 2nd one is added. > > The issue is rdma_addr_cancel() has to be called rdma_resolve_ip() can > be called again. > > Skipping it will cause 'req_list' to have two items in the internal > linked list with the same key and it will not cancel the newest one > with the active timer. This would cause the use after free syndrome > like this trace is showing. > > I can make a patch, but have no way to know if it is any good :\ Good detective work! But if you have a theory of what happens, it's usually easy to write a reproducer that aims at triggering this exact scenario. Isn't it the case here? I would assume you need it to add as a test anyway.
next prev parent reply other threads:[~2021-09-20 8:13 UTC|newest] Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-09-15 12:41 syzbot 2021-09-15 19:36 ` Jason Gunthorpe 2021-09-16 7:43 ` Dmitry Vyukov 2021-09-16 13:04 ` Jason Gunthorpe 2021-09-16 14:45 ` Dmitry Vyukov 2021-09-16 14:47 ` Dmitry Vyukov 2021-09-16 14:55 ` Dmitry Vyukov 2021-09-16 15:08 ` Jason Gunthorpe 2021-09-16 15:17 ` Dmitry Vyukov 2021-09-16 16:02 ` Jason Gunthorpe 2021-09-16 16:28 ` Jason Gunthorpe 2021-09-20 8:13 ` Dmitry Vyukov [this message] [not found] ` <firstname.lastname@example.org> 2021-10-05 12:23 ` Jason Gunthorpe [not found] ` <email@example.com> 2021-10-06 11:41 ` Jason Gunthorpe
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=CACT4Y+aq+m8DkB+8Zvh0G5Ehmtd2kgapDr9eJEP0Mq5WLCOWMg@mail.gmail.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --subject='Re: [syzbot] KASAN: use-after-free Read in addr_handler (4)' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).