On Thu, Nov 29, 2018 at 04:51:19PM -0200, Martin Pieuchot wrote:
> Trivial one, ok?
> 
> Index: kern/sysv_msg.c
> ===================================================================
> RCS file: /cvs/src/sys/kern/sysv_msg.c,v
> retrieving revision 1.33
> diff -u -p -r1.33 sysv_msg.c
> --- kern/sysv_msg.c   15 Sep 2016 02:00:16 -0000      1.33
> +++ kern/sysv_msg.c   29 Nov 2018 18:47:05 -0000
> @@ -699,7 +699,7 @@ sysctl_sysvmsg(int *name, u_int namelen,
>                   msginfo.msgmni * sizeof(struct msqid_ds);
>  

infolen is calculated twice; the first infolen calculation is used as
argument to malloc(). Your diff makes the second one the size argument
to free(), which doesn't seem correct.

>               if (*sizep < infolen) {
> -                     free(info, M_TEMP, 0);
> +                     free(info, M_TEMP, infolen);
>                       return (ENOMEM);
>               }
>  
> @@ -716,7 +716,7 @@ sysctl_sysvmsg(int *name, u_int namelen,
>  
>               error = copyout(info, where, infolen);
>  
> -             free(info, M_TEMP, 0);
> +             free(info, M_TEMP, infolen);
>  
>               return (error);
>  
> 

Reply via email to