[PATCH 2/3] io: Add closefrom [BZ #10353]

Adhemerval Zanella adhemerval.zanella@linaro.org
Tue Dec 22 13:28:12 GMT 2020



On 22/12/2020 10:17, Florian Weimer wrote:
> * Adhemerval Zanella:
> 
>>> Right, but I think it's needed for correctness.  closefrom (3) should
>>> work even if all descriptors are open.
>>
>> Alright, I think we can do something like:
>>
>>   int dirfd = __open_nocancel (FD_TO_FILENAME_PREFIX, O_RDONLY | O_DIRECTORY, 0);
>>   if (dirfd == -1 && errno == EMFILE)
>>     {
>>       int maxfd = __getdtablesize ();
>>       for (int i = lowfd; i < maxfd; i++)
>> 	if (__close_nocancel (i) == 0)
>> 	  break;
>>       dirfd = __open_nocancel (FD_TO_FILENAME_PREFIX, O_RDONLY | O_DIRECTORY, 0);
>>       if (dirfd == -1)
>>         goto err;
>>     }
>>
> 
> I suggest errno != ENOENT (not mounted /proc), but otherwise looks good.

Do you mean fail with /proc is not mounted? 

  int dirfd = __open_nocancel (FD_TO_FILENAME_PREFIX, O_RDONLY | O_DIRECTORY, 0);
  if (dirfd == -1)
    {
      if (errno != EMFILE)
        goto err;

      int maxfd = __getdtablesize ();
      for (int i = lowfd; i < maxfd; i++)
        if (__close_nocancel (i) == 0)
 	  break;
      dirfd = __open_nocancel (FD_TO_FILENAME_PREFIX, O_RDONLY | O_DIRECTORY, 0);
      if (dirfd == -1)
        goto err;
    }


More information about the Libc-alpha mailing list