re: Problem with sethostname() ??

From: Saji Kumar VR (saji.kumar@wipro.com)
Date: Thu Oct 10 2002 - 05:30:20 EST


-----Original Message-----
From: saji kumar [mailto:saji.kumar@wipro.com]
Sent: Thursday, October 10, 2002 3:39 PM
To: suresh.babu@wipro.com; linux-kernel@vger.kernel.org
Cc: Kiran Vijayakumar
Subject: RE: Problem with sethostname() ??

Hi,

 If U see the code for __generic_copy_from_user() in
arch/i386/lib/usercopy.c ( from my understanding copy_from_user() boils down
to this function),

 unsigned long
__generic_copy_from_user(void *to, const void *from, unsigned long n)
{
        prefetchw(to);
        if (access_ok(VERIFY_READ, from, n))
                __copy_user_zeroing(to,from,n);
        else
                memset(to, 0, n);
        return n;
}

here, if access_ok() fails, which is the case here (when an invalid from
address is given), it memsets() the "to" address to zero,
which is the reason for the hostname being reset to NULL (please correct me
if I am wrong somewhere)

I ran this program on 2.5 kernel with the memset() removed, & it gave no
problem..

Can anyone please explain, why do we need to reset the "to" address ?

Rgds,
Saji
-----Original Message-----
From: Suresh babu V. [mailto:suresh.babu@wipro.com]
Sent: Thursday, October 10, 2002 10:48 AM
To: linux-kernel@vger.kernel.org
Cc: 'Saji Kumar VR'
Subject: Problem with sethostname() ??

Hi,
        While attempting for some testing with sethostname() call, I got
this problem . As explained in the man page the sethostname call is
failing(ret val = -1 & errno = EFAULT(14)) for invalid address and valid
length. But the problem is after running the following test, hostname is
getting reset to NULL. I tested in both 2.4 & 2.5 kernels.
Any comments on this??
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>

main()
{
int ret, errno;
unsigned short int len;
char host[50]="tmphost"; /* hostname max size is 64 */
errno = 0;
len = sizeof(host);
/* valid length and invalid address, expected err is EFAULT */
ret = sethostname((void *)-1, len);
printf("return val : %d, err no: %d \n",ret,errno);
}
        I saw the code of sys_sethostname() function (sys.c) , in which
copy_from_user() is being called. I would like to know is it required to
validate the name argument before calling copy_from_user() to avoid such
problems.
        We can expect similar problem in setdomainname() also in which same
sort of code is used.
PS : Please CC me your replies as I havn't subscribed to the list.
Thanks,
Suresh.



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



This archive was generated by hypermail 2b29 : Tue Oct 15 2002 - 22:00:36 EST