Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 26 Sep 2014 08:37:58 +0200
From: Szabolcs Nagy <nsz@...t70.net>
To: ?????? <jianzhong.huang@...oft.com.cn>
Cc: musl@...ts.openwall.com
Subject: Re: fdopen/fflush problem

* ?????? <jianzhong.huang@...oft.com.cn> [2014-09-26 14:05:57 +0800]:
> Hi, there,
> I encounter a problem about fdopen and fflush with musl, here is the code:

the strace is

open("/tmp/abcdeLidlpm", O_ACCMODE|O_CREAT|O_EXCL|O_LARGEFILE|O_CLOEXEC, 0600) = 3
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
writev(1, [{"filename: /tmp/abcdeLidlpm", 26}, {"\n", 1}], 2filename: /tmp/abcdeLidlpm
) = 27
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfbdb314) = -1 ENOTTY (Inappropriate ioctl for device)
writev(3, [{"test string\n", 12}, {NULL, 0}], 2) = -1 EBADF (Bad file descriptor)

> int main()
> {
> char filename[17] = "/tmp/abcdeXXXXXX";
> int fd = mkostemp(filename, O_WRONLY|O_CLOEXEC);

it seems O_WRONLY gets lost

this is what musl does:

	if ((fd = open(template, flags | O_RDWR | O_CREAT | O_EXCL, 0600))>=0)

and O_WRONLY is 1, O_RDWR is 2 and O_ACCMODE is 3

so it is a musl bug: due to historical accidents
O_RDONLY and O_WRONLY are not proper bitflags
and thus O_WRONLY|O_RDWR has special meaning

(for details see "File access mode" section in
http://man7.org/linux/man-pages/man2/open.2.html
)

> printf("filename: %s\n", filename);
> if(fd < 0)
> printf("fd error\n");
> 
> FILE *f = fdopen(fd, "we");
> fputs("test string\n", f);
> fflush(f);
> 
> if(ferror(f))
> printf("file error\n");
> 
> fclose(f);
> }
> 
> As expected, the final file should contains one line and no ferror reported.
> 
> Anybody can help to check it?
> 
> By the way, I did not subscribe to this mail list with this mail box,
> please CC to jianzhong.huang AT i-soft.com.cn
> 
> -- 
> Huang JianZhong
> 
> 

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.