Author: trasz
Date: Tue Sep  1 18:30:17 2009
New Revision: 196740
URL: http://svn.freebsd.org/changeset/base/196740

Log:
  Fix regression introduced with NFSv4 ACL support - make acl_to_text(3)
  and acl_calc_mask(3) return error instead of crashing when acl passed
  to them is NULL.
  
  Submitted by: markus
  Reviewed by:  rwatson
  MFC after:    3 days

Modified:
  head/lib/libc/posix1e/acl_calc_mask.c
  head/lib/libc/posix1e/acl_to_text.c

Modified: head/lib/libc/posix1e/acl_calc_mask.c
==============================================================================
--- head/lib/libc/posix1e/acl_calc_mask.c       Tue Sep  1 17:55:37 2009        
(r196739)
+++ head/lib/libc/posix1e/acl_calc_mask.c       Tue Sep  1 18:30:17 2009        
(r196740)
@@ -50,12 +50,6 @@ acl_calc_mask(acl_t *acl_p)
        acl_t           acl_new;
        int             i, mask_mode, mask_num;
 
-       if (!_acl_brand_may_be(*acl_p, ACL_BRAND_POSIX)) {
-               errno = EINVAL;
-               return (-1);
-       }
-       _acl_brand_as(*acl_p, ACL_BRAND_POSIX);
-
        /*
         * (23.4.2.4) requires acl_p to point to a pointer to a valid ACL.
         * Since one of the primary reasons to use this function would be
@@ -67,6 +61,13 @@ acl_calc_mask(acl_t *acl_p)
                errno = EINVAL;
                return (-1);
        }
+
+       if (!_acl_brand_may_be(*acl_p, ACL_BRAND_POSIX)) {
+               errno = EINVAL;
+               return (-1);
+       }
+       _acl_brand_as(*acl_p, ACL_BRAND_POSIX);
+
        acl_int = &(*acl_p)->ats_acl;
        if ((acl_int->acl_cnt < 3) || (acl_int->acl_cnt > ACL_MAX_ENTRIES)) {
                errno = EINVAL;

Modified: head/lib/libc/posix1e/acl_to_text.c
==============================================================================
--- head/lib/libc/posix1e/acl_to_text.c Tue Sep  1 17:55:37 2009        
(r196739)
+++ head/lib/libc/posix1e/acl_to_text.c Tue Sep  1 18:30:17 2009        
(r196740)
@@ -70,11 +70,6 @@ _posix1e_acl_to_text(acl_t acl, ssize_t 
        if (buf == NULL)
                return(NULL);
 
-       if (acl == NULL) {
-               errno = EINVAL;
-               return(NULL);
-       }
-
        acl_int = &acl->ats_acl;
 
        mask_perm = ACL_PERM_BITS;      /* effective is regular if no mask */
@@ -243,6 +238,11 @@ char *
 acl_to_text_np(acl_t acl, ssize_t *len_p, int flags)
 {
 
+       if (acl == NULL) {
+               errno = EINVAL;
+               return(NULL);
+       }
+
        switch (_acl_brand(acl)) {
        case ACL_BRAND_POSIX:
                return (_posix1e_acl_to_text(acl, len_p, flags));
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to