NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

lib/41620: lockf(3) doesn't fail upon invalid input

>Number:         41620
>Category:       lib
>Synopsis:       lockf(3) doesn't fail upon invalid input
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    lib-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Jun 20 09:15:00 +0000 2009
>Originator:     Stathis Kamperis
>Release:        NetBSD 5.0_STABLE
Aristotle University of Thessaloniki
NetBSD voyager 5.0_STABLE NetBSD 5.0_STABLE (MYGENERIC) #5: Fri Jun 19 14:00:32 
EEST 2009  root@voyager:/usr/obj/sys/arch/i386/compile/MYGENERIC i386

According to POSIX, issue 6 lockf(3) shall return:

The function argument is not one of F_LOCK, F_TLOCK, F_TEST, or F_ULOCK;
-> or size plus the current file offset is less than 0. <-

On the contrary NetBSD reports success (?). JFYI sunOS 5.10 returns the proper 
code. I didn't test on linux/glibc so I can't comment on that.
[stathis@voyager ~] cat t_lockf.c
#include <assert.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[])
        int fd;

        fd = open("./foo", O_RDWR);
        assert(fd != -1);

        /* Just a sanity check. */
        assert(lseek(fd, 0, SEEK_SET) != -1);

        /* Size plus current file offset is less than 0. */
        assert(lockf(fd, F_LOCK, -1) == -1 && errno == EINVAL);

        assert(close(fd) != -1);


        return (EXIT_SUCCESS);
[stathis@voyager ~] gcc t_lockf.c -Wall
[stathis@voyager ~] ls -lh foo
-rw-r--r--  1 stathis  users  1.0K Jun 20 11:52 foo
[stathis@voyager ~] ./a.out 
assertion "lockf(fd, F_LOCK, -1) == -1 && errno == EINVAL" failed: file 
"t_lockf.c", line 19, f
unction "main"
Abort trap (core dumped)
[stathis@voyager ~] 

Am I missing sth ? 

Home | Main Index | Thread Index | Old Index