From owner-freebsd-bugs@FreeBSD.ORG Sun May 30 17:10:06 2010 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 913131065676 for ; Sun, 30 May 2010 17:10:06 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (unknown [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 5513F8FC21 for ; Sun, 30 May 2010 17:10:06 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id o4UHA62g072011 for ; Sun, 30 May 2010 17:10:06 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id o4UHA6wG072010; Sun, 30 May 2010 17:10:06 GMT (envelope-from gnats) Resent-Date: Sun, 30 May 2010 17:10:06 GMT Resent-Message-Id: <201005301710.o4UHA6wG072010@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Eugene Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 746CD106564A for ; Sun, 30 May 2010 17:06:12 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21]) by mx1.freebsd.org (Postfix) with ESMTP id 633748FC13 for ; Sun, 30 May 2010 17:06:12 +0000 (UTC) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.3/8.14.3) with ESMTP id o4UH6CYg090308 for ; Sun, 30 May 2010 17:06:12 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.3/8.14.3/Submit) id o4UH6Bdt090307; Sun, 30 May 2010 17:06:11 GMT (envelope-from nobody) Message-Id: <201005301706.o4UH6Bdt090307@www.freebsd.org> Date: Sun, 30 May 2010 17:06:11 GMT From: Eugene To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: kern/147226: read(fd, buffer, len) returns -1 immediately, if len >=2147483648 X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 30 May 2010 17:10:06 -0000 >Number: 147226 >Category: kern >Synopsis: read(fd, buffer, len) returns -1 immediately, if len >=2147483648 >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun May 30 17:10:06 UTC 2010 >Closed-Date: >Last-Modified: >Originator: Eugene >Release: r200984M >Organization: >Environment: FreeBSD lala.ru 7.2-STABLE FreeBSD 7.2-STABLE #0 r200984M: Fri Apr 23 16:54:24 MSD 2010 root@lala.ru:/place/tmp/mk_pkg.2r1fojOn/obj/place/GIT-repos/FreeBSD-7-r199991/sys/PRODUCTION amd64 >Description: read(3) returns -1 immediately, if we are trying to read more than 2Gb from file. >How-To-Repeat: This code demonstrates the bug: ===================================== #include #include #include #include #include #include int main() { const size_t bufferSize = 2L * (1 << 30L); //works //const size_t toRead = 2L * (1 << 30L) - 1 ; //do not work const size_t toRead = 2L * (1 << 30L) ; fprintf(stderr, "%lu\n", bufferSize); fprintf(stderr, "%lu\n", sizeof(size_t)); int fd = open("hostlog.dat", O_RDONLY); char * buffer = (char*) malloc(bufferSize); if(NULL == buffer) { fprintf(stderr, "Cannot allocate\n"); abort(); }; ssize_t res = read(fd, buffer, toRead); fprintf(stderr, "res = %ld\n", res); free(buffer); close(fd); return res; } ======================================== [kharitonov@lala ~/bugfind]$ gcc44 -m64 -Wall ./do.c [kharitonov@lala ~/bugfind]$ ./a.out 2147483648 8 res = -1 [kharitonov@lala ~/bugfind]$ ls -l ./hostlog.dat -rw-rw-r-- 1 kharitonov dev 2346274816 28 May 21:14 ./hostlog.dat >Fix: >Release-Note: >Audit-Trail: >Unformatted: