oss-sec mailing list archives

Re: AW: O_CREAT|O_DIRECTORY on nonexisting file expected behaviour?


From: Daniel Kahn Gillmor <dkg () fifthhorseman net>
Date: Wed, 26 Nov 2014 11:04:38 -0500

On 11/26/2014 10:28 AM, Fiedler Roman wrote:
Von: Eric Blake [mailto:eblake () redhat com]
But if it succeeds, and did NOT create a directory, then it is in
violation of POSIX.

Thanks for the pointer to the POSIX documentation. So it seems to be a 
POSIX-violation, at least on "Linux version 3.2.0-69-generic".

My test program was:

#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>

int main(int argc, char **argv) {
  int fd;
  struct stat statBuf;
  int result;

  fd=open("xxx", O_RDWR|O_CREAT|O_DIRECTORY, 0600);
  result=fstat(fd, &statBuf);
  if(result) {
    fprintf(stderr, "Stat failed\n");
    return(1);
  }
  fprintf(stderr, "New element type is %d\n", S_ISDIR(fd));
  return(0);
}

I just tried the above on debian's 3.17-1-amd64 (3.17-1~exp1, and it
produces:

New element type is 0

So if it's a violation, it hasn't been fixed between 3.2 and 3.17.

        --dkg

Attachment: signature.asc
Description: OpenPGP digital signature


Current thread: