Print this page
15291 zfs-tests errno flaws exposed by 15220

Split Close
Expand all
Collapse all
          --- old/usr/src/test/zfs-tests/cmd/mktree/mktree.c
          +++ new/usr/src/test/zfs-tests/cmd/mktree/mktree.c
↓ open down ↓ 16 lines elided ↑ open up ↑
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  24   24   * Use is subject to license terms.
  25   25   */
  26   26  
       27 +/*
       28 + * Copyright 2022 MNX Cloud, Inc.
       29 + */
       30 +
  27   31  #include <stdio.h>
  28   32  #include <stdlib.h>
  29   33  #include <unistd.h>
  30   34  #include <string.h>
  31   35  #include <fcntl.h>
  32   36  #include <sys/stat.h>
  33   37  #include <sys/types.h>
  34   38  #include <sys/errno.h>
  35   39  #include <sys/param.h>
  36   40  
↓ open down ↓ 63 lines elided ↑ open up ↑
 100  104  
 101  105          if (level > nlevel) {
 102  106                  return (1);
 103  107          }
 104  108  
 105  109          for (d = 0; d < ndir; d++) {
 106  110                  (void) memset(dname, '\0', sizeof (dname));
 107  111                  (void) strcpy(dname, getfdname(pdir, TYPE_D, level, d, 0));
 108  112  
 109  113                  if (mkdir(dname, 0777) != 0) {
      114 +                        int exitcode = errno;
 110  115                          (void) fprintf(stderr, "mkdir(%s) failed."
 111  116                              "\n[%d]: %s.\n",
 112  117                              dname, errno, strerror(errno));
 113      -                        exit(errno);
      118 +                        exit(exitcode);
 114  119                  }
 115  120  
 116  121                  /*
 117  122                   * No sub-directory need be created, only create files in it.
 118  123                   */
 119  124                  if (mktree(dname, level+1) != 0) {
 120  125                          for (f = 0; f < nfile; f++) {
 121  126                                  (void) memset(fname, '\0', sizeof (fname));
 122  127                                  (void) strcpy(fname,
 123  128                                      getfdname(dname, TYPE_F, level+1, d, f));
↓ open down ↓ 18 lines elided ↑ open up ↑
 142  147              "%s/%c-l%dd%df%d", pdir, type, level, dir, file);
 143  148          return (fdname);
 144  149  }
 145  150  
 146  151  static void
 147  152  crtfile(char *pname)
 148  153  {
 149  154          int fd = -1;
 150  155          int afd = -1;
 151  156          int i, size;
      157 +        int exitcode;
 152  158          char *context = "0123456789ABCDF";
 153  159          char *pbuf;
 154  160  
 155  161          if (pname == NULL) {
 156  162                  exit(1);
 157  163          }
 158  164  
 159  165          size = sizeof (char) * 1024;
 160  166          pbuf = (char *)valloc(size);
 161  167          for (i = 0; i < size / strlen(context); i++) {
 162  168                  int offset = i * strlen(context);
 163  169                  (void) snprintf(pbuf+offset, size-offset, "%s", context);
 164  170          }
 165  171  
 166  172          if ((fd = open(pname, O_CREAT|O_RDWR, 0777)) < 0) {
      173 +                exitcode = errno;
 167  174                  (void) fprintf(stderr, "open(%s, O_CREAT|O_RDWR, 0777) failed."
 168  175                      "\n[%d]: %s.\n", pname, errno, strerror(errno));
 169      -                exit(errno);
      176 +                exit(exitcode);
 170  177          }
 171  178          if (write(fd, pbuf, 1024) < 1024) {
      179 +                exitcode = errno;
 172  180                  (void) fprintf(stderr, "write(fd, pbuf, 1024) failed."
 173  181                      "\n[%d]: %s.\n", errno, strerror(errno));
 174      -                exit(errno);
      182 +                exit(exitcode);
 175  183          }
 176  184  
 177  185          if ((afd = openat(fd, "xattr", O_CREAT | O_RDWR | O_XATTR, 0777)) < 0) {
      186 +                exitcode = errno;
 178  187                  (void) fprintf(stderr, "openat failed.\n[%d]: %s.\n",
 179  188                      errno, strerror(errno));
 180      -                exit(errno);
      189 +                exit(exitcode);
 181  190          }
 182  191          if (write(afd, pbuf, 1024) < 1024) {
      192 +                exitcode = errno;
 183  193                  (void) fprintf(stderr, "write(afd, pbuf, 1024) failed."
 184  194                      "\n[%d]: %s.\n", errno, strerror(errno));
 185      -                exit(errno);
      195 +                exit(exitcode);
 186  196          }
 187  197  
 188  198          (void) close(afd);
 189  199          (void) close(fd);
 190  200          free(pbuf);
 191  201  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX