lib: do not call memcpy with sz zero and null pointer
Checks
Commit Message
There is no point in such a call and UBSan complains about a call to
memcpy with a null pointer as second arg.
When building with -Db_sanitize=undefined, Clang gives the following
warning
../lib/bpf/bpf_load.c:37:20: runtime error: null pointer passed as
argument 2, which is declared to never be null
A check of the sz before calling memcpy fixes that.
Signed-off-by: Henning Schild <henning.schild@siemens.com>
---
lib/bpf/bpf_load.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Comments
07/09/2022 17:05, Henning Schild:
> There is no point in such a call and UBSan complains about a call to
> memcpy with a null pointer as second arg.
>
> When building with -Db_sanitize=undefined, Clang gives the following
> warning
> ../lib/bpf/bpf_load.c:37:20: runtime error: null pointer passed as
> argument 2, which is declared to never be null
>
> A check of the sz before calling memcpy fixes that.
>
> Signed-off-by: Henning Schild <henning.schild@siemens.com>
> ---
> --- a/lib/bpf/bpf_load.c
> +++ b/lib/bpf/bpf_load.c
> @@ -34,7 +34,8 @@ bpf_load(const struct rte_bpf_prm *prm)
>
> memcpy(&bpf->prm, prm, sizeof(bpf->prm));
>
> - memcpy(buf + bsz, prm->xsym, xsz);
> + if (xsz)
> + memcpy(buf + bsz, prm->xsym, xsz);*
I assume I can safely change it to
if (xsz > 0)
to comply with the code style.
Applied, thanks.
Am Wed, 21 Sep 2022 15:06:12 +0200
schrieb Thomas Monjalon <thomas@monjalon.net>:
> 07/09/2022 17:05, Henning Schild:
> > There is no point in such a call and UBSan complains about a call to
> > memcpy with a null pointer as second arg.
> >
> > When building with -Db_sanitize=undefined, Clang gives the following
> > warning
> > ../lib/bpf/bpf_load.c:37:20: runtime error: null pointer passed as
> > argument 2, which is declared to never be null
> >
> > A check of the sz before calling memcpy fixes that.
> >
> > Signed-off-by: Henning Schild <henning.schild@siemens.com>
> > ---
> > --- a/lib/bpf/bpf_load.c
> > +++ b/lib/bpf/bpf_load.c
> > @@ -34,7 +34,8 @@ bpf_load(const struct rte_bpf_prm *prm)
> >
> > memcpy(&bpf->prm, prm, sizeof(bpf->prm));
> >
> > - memcpy(buf + bsz, prm->xsym, xsz);
> > + if (xsz)
> > + memcpy(buf + bsz, prm->xsym, xsz);*
>
> I assume I can safely change it to
> if (xsz > 0)
> to comply with the code style.
Sure, thanks!
Henning
>
> Applied, thanks.
>
>
@@ -34,7 +34,8 @@ bpf_load(const struct rte_bpf_prm *prm)
memcpy(&bpf->prm, prm, sizeof(bpf->prm));
- memcpy(buf + bsz, prm->xsym, xsz);
+ if (xsz)
+ memcpy(buf + bsz, prm->xsym, xsz);
memcpy(buf + bsz + xsz, prm->ins, insz);
bpf->prm.xsym = (void *)(buf + bsz);