[PATCH] uqmi: fix compilation with GCC12

Rosen Penev rosenp at gmail.com
Tue Sep 27 19:22:29 PDT 2022


On Sun, Aug 21, 2022 at 7:54 AM Hauke Mehrtens <hauke at hauke-m.de> wrote:
>
> On 6/11/22 16:47, Bjørn Mork wrote:
> > e9hack <e9hack at gmail.com> writes:
> >
> >> The 'dangling pointer' issue can be fix without using malloc().
> >>
> >> --- a/dev.c  2022-05-04 02:18:17.000000000 +0200
> >> +++ b/dev.c  2022-06-11 08:48:21.185567953 +0200
> >> @@ -206,6 +206,7 @@ void qmi_request_cancel(struct qmi_dev *
> >>   int qmi_request_wait(struct qmi_dev *qmi, struct qmi_request *req)
> >>   {
> >>      bool complete = false;
> >> +    bool *c;
> >>      bool cancelled;
> >>      if (!req->pending)
> >> @@ -226,8 +227,10 @@ int qmi_request_wait(struct qmi_dev *qmi
> >>              uloop_cancelled = cancelled;
> >>      }
> >>   -  if (req->complete == &complete)
> >> -            req->complete = NULL;
> >> +    c = req->complete;
> >> +    req->complete = NULL;
> >> +    if (c != &complete)
> >> +            req->complete = c;
> >>      return req->ret;
> >>   }
> >
> > How about just fixing GCC instead?  Having all sorts of funny and
> > pointless code just to avoid bogus compiler warnings is kind of stupid,
> > isn't it?
> >
> > If GCC can't do better that this, then it's much better to disable that
> > warning.
>
> GCC complains about this code because the pointer is only removed
> conditionally
> -------------------------------------------
>         if (req->complete == &complete)
>                 req->complete = NULL;
> -------------------------------------------
> https://git.openwrt.org/?p=project/uqmi.git;a=blob;f=dev.c;h=bd1020790f844fd364fd753135acd8f53f34d996;hb=HEAD#l229
>
> When you make this part unconditionally it does not complain any more.
>
> Is it possible that something changes the req->complete pointer address
> in between?
this is still an issue.
>
> Hauke



More information about the openwrt-devel mailing list