[PATCH 11/23] P2P: Cleanup handling of unknown peer in PD request processing

Peer, Ilan ilan.peer
Tue Oct 6 12:10:28 PDT 2015


Hi Jouni,

> -----Original Message-----
> From: Jouni Malinen [mailto:j at w1.fi]
> Sent: Monday, October 05, 2015 19:56
> To: Peer, Ilan
> Cc: hostap at lists.shmoo.com
> Subject: Re: [PATCH 11/23] P2P: Cleanup handling of unknown peer in PD
> request processing
> 
> On Thu, Sep 24, 2015 at 08:38:01PM +0300, Ilan Peer wrote:
> > If a P2P provision discovery request is received for an unknown peer,
> > a new device entry is being added, but the flow continues without
> > updating the local p2p_device pointer, requiring to check the pointer
> > value before every access.
> >
> > Change this, so once a device is added, the flow updates the local
> > p2p_device pointer and avoids the checks later in the flow.
> 
> > diff --git a/src/p2p/p2p_pd.c b/src/p2p/p2p_pd.c @@ -330,8 +330,7 @@
> > static struct wpabuf * p2p_build_prov_disc_resp(struct p2p_data *p2p,
> > -			if (dev)
> > -				p2p_go_select_channel(p2p, dev, &tmp);
> > +			p2p_go_select_channel(p2p, dev, &tmp);
> 
> Could you please clarify why this change is fine?
> p2p_go_select_channel() dereferences the dev argument unconditionally..
>

I know see that it is not .. need to fix it. 

> > @@ -575,6 +574,19 @@ void p2p_process_prov_disc_req(struct p2p_data
> > *p2p, const u8 *sa,
> > +			p2p_parse_free(&msg);
> > +			goto out;
> 
> And this "goto out" case has dev == NULL.
> 
> > +		if (!dev) {
> > +			dev = p2p_get_device(p2p, sa);
> > +			if (!dev) {
> > +				p2p_dbg(p2p,
> > +					"Provision Discovery device not found
> "
> > +					MACSTR, MAC2STR(sa));
> > +				p2p_parse_free(&msg);
> > +				goto out;
> > +			}
> 
> Just like this one..
> 
> Wouldn't this result in NULL pointer dereference in
> p2p_go_select_channel() due to that p2p_build_prov_disc_resp() change?
> 

Thanks. I'll fix this. 

Ilan.



More information about the Hostap mailing list