fix NGROUPS hard limit (resend)

fix NGROUPS hard limit (resend)

Post by Timothy Hocki » Wed, 23 Oct 2002 02:50:08



# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#                  ChangeSet    1.810   -> 1.811  
#       include/linux/sunrpc/svcauth.h  1.4     -> 1.5    
#       net/sunrpc/svcauth_unix.c       1.7     -> 1.8    
#             fs/nfsd/auth.c    1.1     -> 1.2    
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------

# fix usage of NGROUPS in nfsd and svcauth
# --------------------------------------------
#
diff -Nru a/fs/nfsd/auth.c b/fs/nfsd/auth.c
--- a/fs/nfsd/auth.c    Mon Oct 21 17:14:34 2002

 #include <linux/sunrpc/svcauth.h>
 #include <linux/nfsd/nfsd.h>

+extern asmlinkage long sys_setgroups(int gidsetsize, gid_t *grouplist);
+
 #define        CAP_NFSD_MASK (CAP_FS_MASK|CAP_TO_MASK(CAP_SYS_RESOURCE))
 void
 nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp)
 {
        struct svc_cred *cred = &rqstp->rq_cred;
        int             i;
+       gid_t           groups[SVC_CRED_NGROUPS];

        if (rqstp->rq_userset)

                        cred->cr_uid = exp->ex_anon_uid;
                if (!cred->cr_gid)
                        cred->cr_gid = exp->ex_anon_gid;
-               for (i = 0; i < NGROUPS; i++)
+               for (i = 0; i < SVC_CRED_NGROUPS; i++)
                        if (!cred->cr_groups[i])
                                cred->cr_groups[i] = exp->ex_anon_gid;

                current->fsgid = cred->cr_gid;
        else
                current->fsgid = exp->ex_anon_gid;
-       for (i = 0; i < NGROUPS; i++) {
+       for (i = 0; i < SVC_CRED_NGROUPS; i++) {
                gid_t group = cred->cr_groups[i];
                if (group == (gid_t) NOGROUP)
                        break;
-               current->groups[i] = group;
+               groups[i] = group;
        }
-       current->ngroups = i;
+       sys_setgroups(i, groups);

        if ((cred->cr_uid)) {
                cap_t(current->cap_effective) &= ~CAP_NFSD_MASK;
diff -Nru a/include/linux/sunrpc/svcauth.h b/include/linux/sunrpc/svcauth.h
--- a/include/linux/sunrpc/svcauth.h    Mon Oct 21 17:14:34 2002

 #include <linux/sunrpc/msg_prot.h>
 #include <linux/sunrpc/cache.h>

+#define SVC_CRED_NGROUPS       32
 struct svc_cred {
        uid_t                   cr_uid;
        gid_t                   cr_gid;
-       gid_t                   cr_groups[NGROUPS];
+       gid_t                   cr_groups[SVC_CRED_NGROUPS];
 };

 struct svc_rqst;               /* forward decl */
diff -Nru a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c
--- a/net/sunrpc/svcauth_unix.c Mon Oct 21 17:14:34 2002

        slen = ntohl(*bufp++);                  /* gids length */
        if (slen > 16 || (len -= slen + 2) < 0)
                goto badcred;
-       for (i = 0; i < NGROUPS && i < slen; i++)
+       for (i = 0; i < SVC_CRED_NGROUPS && i < slen; i++)
                cred->cr_groups[i] = ntohl(*bufp++);
-       if (i < NGROUPS)
+       if (i < SVC_CRED_NGROUPS)
                cred->cr_groups[i] = NOGROUP;
        bufp += (slen - i);

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in

More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

 
 
 

fix NGROUPS hard limit (resend)

Post by Timothy Hocki » Wed, 30 Oct 2002 21:40:11


# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#                  ChangeSet    1.810   -> 1.811  
#       include/linux/sunrpc/svcauth.h  1.4     -> 1.5    
#       net/sunrpc/svcauth_unix.c       1.7     -> 1.8    
#             fs/nfsd/auth.c    1.1     -> 1.2    
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------

# fix usage of NGROUPS in nfsd and svcauth
# --------------------------------------------
#
diff -Nru a/fs/nfsd/auth.c b/fs/nfsd/auth.c
--- a/fs/nfsd/auth.c    Mon Oct 21 17:14:34 2002

 #include <linux/sunrpc/svcauth.h>
 #include <linux/nfsd/nfsd.h>

+extern asmlinkage long sys_setgroups(int gidsetsize, gid_t *grouplist);
+
 #define        CAP_NFSD_MASK (CAP_FS_MASK|CAP_TO_MASK(CAP_SYS_RESOURCE))
 void
 nfsd_setuser(struct svc_rqst *rqstp, struct svc_export *exp)
 {
        struct svc_cred *cred = &rqstp->rq_cred;
        int             i;
+       gid_t           groups[SVC_CRED_NGROUPS];

        if (rqstp->rq_userset)

                        cred->cr_uid = exp->ex_anon_uid;
                if (!cred->cr_gid)
                        cred->cr_gid = exp->ex_anon_gid;
-               for (i = 0; i < NGROUPS; i++)
+               for (i = 0; i < SVC_CRED_NGROUPS; i++)
                        if (!cred->cr_groups[i])
                                cred->cr_groups[i] = exp->ex_anon_gid;

                current->fsgid = cred->cr_gid;
        else
                current->fsgid = exp->ex_anon_gid;
-       for (i = 0; i < NGROUPS; i++) {
+       for (i = 0; i < SVC_CRED_NGROUPS; i++) {
                gid_t group = cred->cr_groups[i];
                if (group == (gid_t) NOGROUP)
                        break;
-               current->groups[i] = group;
+               groups[i] = group;
        }
-       current->ngroups = i;
+       sys_setgroups(i, groups);

        if ((cred->cr_uid)) {
                cap_t(current->cap_effective) &= ~CAP_NFSD_MASK;
diff -Nru a/include/linux/sunrpc/svcauth.h b/include/linux/sunrpc/svcauth.h
--- a/include/linux/sunrpc/svcauth.h    Mon Oct 21 17:14:34 2002

 #include <linux/sunrpc/msg_prot.h>
 #include <linux/sunrpc/cache.h>

+#define SVC_CRED_NGROUPS       32
 struct svc_cred {
        uid_t                   cr_uid;
        gid_t                   cr_gid;
-       gid_t                   cr_groups[NGROUPS];
+       gid_t                   cr_groups[SVC_CRED_NGROUPS];
 };

 struct svc_rqst;               /* forward decl */
diff -Nru a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c
--- a/net/sunrpc/svcauth_unix.c Mon Oct 21 17:14:34 2002

        slen = ntohl(*bufp++);                  /* gids length */
        if (slen > 16 || (len -= slen + 2) < 0)
                goto badcred;
-       for (i = 0; i < NGROUPS && i < slen; i++)
+       for (i = 0; i < SVC_CRED_NGROUPS && i < slen; i++)
                cred->cr_groups[i] = ntohl(*bufp++);
-       if (i < NGROUPS)
+       if (i < SVC_CRED_NGROUPS)
                cred->cr_groups[i] = NOGROUP;
        bufp += (slen - i);

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in

More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/