Le 01/02/2014 10:51, Martin Husemann a écrit :
> On Sat, Feb 01, 2014 at 08:41:15AM +0000, Emmanuel Dreyfus wrote:
>> Hi
>>
>> Here is my latest attempt at netbsd32 swapctl. I had to make uvm_swap_stats()
>> available to emul code, but that seems to be what it was intented for,
>> according to comments in the code.
> 
> Looks good.

Does not look good to me:

> +netbsd32_swapctl_stats(struct lwp *l, struct sys_swapctl_args *uap, 
> register_t *retval)
> +{
> +     struct swapent *sep;
> +     struct netbsd32_swapent *sep32;
> +     int count = SCARG(uap, misc);
> +     int i, error;
> +
> +     sep = kmem_alloc(sizeof(*sep) * count, KM_SLEEP);
> +     sep32 = kmem_alloc(sizeof(*sep32) * count, KM_SLEEP);
> +
> +     uvm_swap_stats(SWAP_STATS, sep, count, retval);
> +     count = *retval;
> +
> +     if (count < 1)
> +             goto out;

'error' is not initialized here

> +
> +     for (i = 0; i < count; i++) {
> +             sep32[i].se_dev = sep[i].se_dev;
> +             sep32[i].se_flags = sep[i].se_flags;
> +             sep32[i].se_nblks = sep[i].se_nblks;
> +             sep32[i].se_inuse = sep[i].se_inuse;
> +             sep32[i].se_priority = sep[i].se_priority;
> +             strlcpy(sep32[i].se_path, sep[i].se_path,
> +                     sizeof(sep32[i].se_path));
> +     }
> +
> +     error = copyout(sep32, SCARG(uap, arg), sizeof(*sep32) * count);
> +     
> +out:
> +     kmem_free(sep, sizeof(*sep));
> +     kmem_free(sep32, sizeof(*sep32));
> +
> +     return error;
> +}

Reply via email to