Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date: Wed, 13 Oct 2021 01:21:31 +0000
From: "(GalaxyMaster)" <galaxy@...nwall.com.au>
To: musl@...ts.openwall.com
Subject: errno on writing to read-only files

Hello,

I am observing the following on musl and I am not sure that this is the way it
should be:
===
galaxy@...hlinux:~/musl-tests $ cat fput-to-readonly.c 
#include <stdio.h>
#include <errno.h>

int main() {
	FILE *f;
	int i = 0;
	f = fopen("fput-to-readonly.c", "r");
	errno = 0;
	i = fputs("should not be written", f);
	printf("i = %d (should be negative [EOF = %d])\n", i, EOF);
	printf("errno = %d\n", errno);
	return 0;
}
galaxy@...hlinux:~/musl-tests $ gcc -o fput-to-readonly fput-to-readonly.c 
galaxy@...hlinux:~/musl-tests $ ./fput-to-readonly 
i = -1 (should be negative [EOF = -1])
errno = 0
galaxy@...hlinux:~/musl-tests $
===

Logically, I would expect the errno variable to be set to something since there
was clearly an error and the data has not been written to the destination.

Glibc returns EBADF (9) in this case:
===
[galaxy@...hlinux musl-tests]$ ./fput-to-readonly 
i = -1 (should be negative [EOF = -1])
errno = 9
[galaxy@...hlinux musl-tests]$
===

Should not we do the same?  It kind of makes sense since the descriptor we are
asked to write to is read-only.  I think it would be just one line added to
src/stdio/__towrite.c, something like:
===
--- musl-b76f37fd5625d038141b52184956fb4b7838e9a5.orig/src/stdio/__towrite.c	2021-09-24 00:09:22.000000000 +0000
+++ musl-b76f37fd5625d038141b52184956fb4b7838e9a5/src/stdio/__towrite.c	2021-10-13 01:16:04.713069382 +0000
@@ -5,6 +5,7 @@ int __towrite(FILE *f)
 	f->mode |= f->mode-1;
 	if (f->flags & F_NOWR) {
 		f->flags |= F_ERR;
+		errno = EBADF;
 		return EOF;
 	}
 	/* Clear read buffer (easier than summoning nasal demons) */
===

-- 
(GM)

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.