Re: LKM, problem with simple char from string.

From: Randy.Dunlap
Date: Mon Aug 16 2004 - 16:29:30 EST


On Mon, 16 Aug 2004 12:31:51 +0200 authn wrote:

| Hello,
| I am coding a linux kernel module and have problem with some string from user
| space (from execve system call). There is no problem with useing this string
| as a one, for example printk(KERN_ALERT "%s", string) works fine.
| Problem appears when i want to printk or compare single char, in first case it
| is printked with some extra '<1>' and in second case, when i compare it with
| other one, it doesnt fit to real char (it is "connected" with '<1>' in some
| way ?). I tried to copy it to kmalloced buffer:
|
| if ((k_space=(char *)kmalloc(len, GFP_KERNEL))==NULL)
| return -1;
| memcpy_fromfs((void *)k_space, (void *)argv[argc], len);
|
| but then playing with k_space[i] was the same.
| Short code from module:
| if ((k_space=(char *)kmalloc(len, GFP_KERNEL))==NULL)
| return -1;
| memset(k_space, '\0', sizeof(k_space));

I don't think that this is the main problem, but sizeof(k_space) here
is just the sizeof a pointer (I guess, can't see entire source code),
like 4 or 8.

| memcpy_fromfs((char *)k_space, (char *)argv[argc], len);
| printk(KERN_ALERT"%s\n", k_space);
| printk(KERN_ALERT "%c\n",k_space[i]);
| And then i ll have in log file string (from first printk call) and char with
| <1> (from second printk call). It doesnt let me to compare chars.
| What it happens ?


--
~Randy
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/