Re: [PATCH 06/13] kexec: New syscall kexec_file_load() declaration

Vivek Goyal
2014-06-05T15:17:22Z

On Thu, Jun 05, 2014 at 05:56:03PM +0800, WANG Chao wrote:

[..]
> > diff --git a/kernel/kexec.c b/kernel/kexec.c
> > index c435c5f..a3044e6 100644
> > --- a/kernel/kexec.c
> > +++ b/kernel/kexec.c
> > @@ -1098,6 +1098,13 @@ COMPAT_SYSCALL_DEFINE4(kexec_load, compat_ulong_t, entry,
> > }
> > #endif
> >
> > +SYSCALL_DEFINE5(kexec_file_load, int, kernel_fd, int, initrd_fd,
> > + const char __user *, cmdline_ptr, unsigned long,
> > + cmdline_len, unsigned long, flags)
>
> initrd is optional for system boot.
>
> How about using int *kernel_fd and int *initrd_fd as the argument? Then
> if I don't need initrd, in userspace I can do this:

Hi Chao,

I really am not too keen converting plain int fd arguments into pointers.

Given the fact that fd is int, that means all valid values are greater
than 0. How about using -1 to denote that initrd is not being loaded?

This does create one little anomaly and that is for all -ve values we
will return -EBADF except -1 which we special cased.

>
> kexec_file_load(&kernel_fd, NULL, ...)
>
> And even you can remove KEXEC_FILE_UNLOAD flag, because you could tell
> that one wants to unload if the following is invoked:
>
> kexec_file_load(NULL, NULL, ...)

I would prefer not to derive special meanings of NULL parameters and
instead use an explicit flag to unload kernel.

Thanks
Vivek