[Samba] Re: kenrel 2.6.4 patch for fixing warning of smbfs on high
gid/uid
Christopher Allen Wing
wingc at engin.umich.edu
Tue Mar 23 14:41:09 GMT 2004
Yes, the use of SET_UID/SET_GID in smbfs is a bug. The current meaning of
SET_UID is:
convert from 32-bit uid (in the kernel) to 16-bit uid (for user),
if necessary
The usage in smbfs was to copy a binary mount parameter structure from
user space into kernel. The user space structure may be 16-bit uid or
32-bit uid, but the kernel structure is always 32-bit. Therefore, no
conversion is necessary.
The following patch should get rid of the warning:
--- fs/smbfs/inode.c.orig 2004-03-10 21:55:22.000000000 -0500
+++ fs/smbfs/inode.c 2004-03-22 15:40:25.000000000 -0500
@@ -551,8 +551,11 @@
if (ver == SMB_MOUNT_OLDVERSION) {
mnt->version = oldmnt->version;
- SET_UID(mnt->uid, oldmnt->uid);
- SET_GID(mnt->gid, oldmnt->gid);
+ /* Since uid/gid of -1 has no special meaning to smbfs, just
+ copy the values as-is instead of bothering with
+ low2high{u,g}id() */
+ mnt->uid = oldmnt->uid;
+ mnt->gid = oldmnt->gid;
mnt->file_mode = (oldmnt->file_mode & S_IRWXUGO) | S_IFREG;
mnt->dir_mode = (oldmnt->dir_mode & S_IRWXUGO) | S_IFDIR;
The bug was introduced by a patch from Andi Kleen in December 2003:
http://linus.bkbits.net:8080/linux-2.5/cset@3f81e988KSG5AkI7YGMi7OGAo-DkJg
Additionally, sparc64 and s390 have a bit of similar unneeded code in
their compatibility layers:
arch/sparc64/kernel/sys_sparc32.c
arch/s390/kernel/compat_linux.c
They are using low2highuid() when processing the ncpfs and smbfs mount
data, but it's not really needed. (it's only needed when -1 is 'special')
I've always wanted to clean up the naming of some of these macros for a
long time, but I've just been lazy. I'll try to submit appropriate
patches at some point. (SET_UID is a really bad name, it should be
something conveying the meaning of CONVERT_TO_OLD_USER_UID)
Thanks,
Chris Wing
wingc at engin.umich.edu
On Thu, 11 Mar 2004, Alexander Stohr wrote:
> Hello,
>
> when i compiled latest linux 2.6.4 kernel source with gcc 3.3.2 on
> Linux/x86,
> i got a few warnings about varaibles beeing compared against constants
> where the range of the variable is so that the expression is always
> constant.
> The explicit comparison has to do with the code for high-uid and gid sheme.
>
> attached you will find a diff which does eliminate this error message
> by introducing an inline function that wont result in the message but
> it will result in compareable dense binary code with normal optimisations.
>
> -Alex.
More information about the samba
mailing list