Print this page
OS-3822 OS-3780 creates a life of fd crime in libproc


 209                 goto err;
 210         }
 211 
 212         if (*fname == '/') {
 213                 (void) strncpy(fp->file_pname, fname, sizeof (fp->file_pname));
 214         } else {
 215                 size_t sz;
 216 
 217                 if (getcwd(fp->file_pname, sizeof (fp->file_pname) - 1) ==
 218                     NULL) {
 219                         *perr = G_STRANGE;
 220                         goto err;
 221                 }
 222 
 223                 sz = strlen(fp->file_pname);
 224                 (void) snprintf(&fp->file_pname[sz],
 225                     sizeof (fp->file_pname) - sz, "/%s", fname);
 226         }
 227 
 228         fp->file_fd = fd;

 229         fp->file_lo->rl_lmident = LM_ID_BASE;
 230         if ((fp->file_lname = strdup(fp->file_pname)) == NULL) {
 231                 *perr = G_STRANGE;
 232                 goto err;
 233         }
 234         fp->file_lbase = basename(fp->file_lname);
 235 
 236         if ((P->execname = strdup(fp->file_pname)) == NULL) {
 237                 *perr = G_STRANGE;
 238                 goto err;
 239         }
 240 
 241         P->num_files++;
 242         list_link(fp, &P->file_head);
 243 
 244         if (gelf_getehdr(elf, &ehdr) == NULL) {
 245                 *perr = G_STRANGE;
 246                 goto err;
 247         }
 248 




 209                 goto err;
 210         }
 211 
 212         if (*fname == '/') {
 213                 (void) strncpy(fp->file_pname, fname, sizeof (fp->file_pname));
 214         } else {
 215                 size_t sz;
 216 
 217                 if (getcwd(fp->file_pname, sizeof (fp->file_pname) - 1) ==
 218                     NULL) {
 219                         *perr = G_STRANGE;
 220                         goto err;
 221                 }
 222 
 223                 sz = strlen(fp->file_pname);
 224                 (void) snprintf(&fp->file_pname[sz],
 225                     sizeof (fp->file_pname) - sz, "/%s", fname);
 226         }
 227 
 228         fp->file_fd = fd;
 229         fp->file_dbgfile = -1;
 230         fp->file_lo->rl_lmident = LM_ID_BASE;
 231         if ((fp->file_lname = strdup(fp->file_pname)) == NULL) {
 232                 *perr = G_STRANGE;
 233                 goto err;
 234         }
 235         fp->file_lbase = basename(fp->file_lname);
 236 
 237         if ((P->execname = strdup(fp->file_pname)) == NULL) {
 238                 *perr = G_STRANGE;
 239                 goto err;
 240         }
 241 
 242         P->num_files++;
 243         list_link(fp, &P->file_head);
 244 
 245         if (gelf_getehdr(elf, &ehdr) == NULL) {
 246                 *perr = G_STRANGE;
 247                 goto err;
 248         }
 249