2007-11-11 01:02:31

by Erez Zadok

[permalink] [raw]
Subject: [PATCH] kernel/capability.c get_task_comm compile error (MMOTM)


Using http://userweb.kernel.org/~akpm/mmotm/ timestamped "10-Nov-2007
22:46".

$ make
CC kernel/capability.o
kernel/capability.c: In function 'sys_capset':
kernel/capability.c:231: warning: passing argument 1 of 'get_task_comm' from incompatible pointer type
kernel/capability.c:231: error: too few arguments to function 'get_task_comm'
make[1]: *** [kernel/capability.o] Error 1
make[1]: Target `__build' not remade because of errors.
make: *** [kernel] Error 2

Small patch below fixes compile error.

Erez.


Signed-off-by: Erez Zadok <[email protected]>

diff --git a/kernel/capability.c b/kernel/capability.c
index ea21bbe..8cba9b2 100644
--- a/kernel/capability.c
+++ b/kernel/capability.c
@@ -225,10 +225,11 @@ asmlinkage long sys_capset(cap_user_header_t header, const cap_user_data_t data)
switch (version) {
case _LINUX_CAPABILITY_VERSION_1:
if (warned < 5) {
+ char name[sizeof(current->comm)];
warned++;
printk(KERN_INFO
"warning: process `%s' sets w/ old libcap\n",
- get_task_comm(current));
+ get_task_comm(name, current));
}
tocopy = _LINUX_CAPABILITY_U32S_1;
break;


2007-11-11 14:20:54

by Ingo Molnar

[permalink] [raw]
Subject: Re: [PATCH] kernel/capability.c get_task_comm compile error (MMOTM)


* Erez Zadok <[email protected]> wrote:

> Small patch below fixes compile error.

> + char name[sizeof(current->comm)];
> warned++;
> printk(KERN_INFO
> "warning: process `%s' sets w/ old libcap\n",
> - get_task_comm(current));
> + get_task_comm(name, current));

that's buggy - get_task_comm() returns void.

the proper fix would be to first do a get_task_comm() then pass in
'name' as an argument to printk.

Ingo

2007-11-11 17:22:21

by Erez Zadok

[permalink] [raw]
Subject: Re: [PATCH] kernel/capability.c get_task_comm compile error (MMOTM)

In message <[email protected]>, Ingo Molnar writes:
>
> * Erez Zadok <[email protected]> wrote:
>
> > Small patch below fixes compile error.
>
> > + char name[sizeof(current->comm)];
> > warned++;
> > printk(KERN_INFO
> > "warning: process `%s' sets w/ old libcap\n",
> > - get_task_comm(current));
> > + get_task_comm(name, current));
>
> that's buggy - get_task_comm() returns void.
>
> the proper fix would be to first do a get_task_comm() then pass in
> 'name' as an argument to printk.
>
> Ingo

Ingo, I don't see how it can return NULL. This is what get_task_comm looks
like in MMOTM-2007-11-10-19-05:

char *get_task_comm(char *buf, struct task_struct *tsk)
{
/* buf must be at least sizeof(tsk->comm) in size */
task_lock(tsk);
strncpy(buf, tsk->comm, sizeof(tsk->comm));
task_unlock(tsk);
return buf;
}

The only way it'd return NULL is if a null buf was passed, in which case the
strncpy will oops first.

Erez.

2007-11-11 19:33:20

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] kernel/capability.c get_task_comm compile error (MMOTM)

On Sun, 11 Nov 2007 15:15:10 +0100 Ingo Molnar <[email protected]> wrote:

>
> * Erez Zadok <[email protected]> wrote:
>
> > Small patch below fixes compile error.
>
> > + char name[sizeof(current->comm)];
> > warned++;
> > printk(KERN_INFO
> > "warning: process `%s' sets w/ old libcap\n",
> > - get_task_comm(current));
> > + get_task_comm(name, current));
>
> that's buggy - get_task_comm() returns void.
>
> the proper fix would be to first do a get_task_comm() then pass in
> 'name' as an argument to printk.

yup, it is all dependent upon http://lkml.org/lkml/2007/11/8/231

2007-11-11 20:45:26

by Ingo Molnar

[permalink] [raw]
Subject: Re: [PATCH] kernel/capability.c get_task_comm compile error (MMOTM)


* Erez Zadok <[email protected]> wrote:

> Ingo, I don't see how it can return NULL. This is what get_task_comm
> looks like in MMOTM-2007-11-10-19-05:
>
> char *get_task_comm(char *buf, struct task_struct *tsk)
> {
> /* buf must be at least sizeof(tsk->comm) in size */
> task_lock(tsk);
> strncpy(buf, tsk->comm, sizeof(tsk->comm));
> task_unlock(tsk);
> return buf;
> }
>
> The only way it'd return NULL is if a null buf was passed, in which
> case the strncpy will oops first.

hm, here it says in include/linux/sched.h:

extern void get_task_comm(char *to, struct task_struct *tsk);

HEAD ecd744eec3a.

Ingo