mirror of git://sourceware.org/git/glibc.git
Always check lockf64 return value
On x86-64, when GCC 14.2.1 is used to build: commitf3c82fc1b4
Author: Radko Krkos <krkos@mail.muni.cz> Date: Sat Jun 14 11:07:40 2025 +0200 io: Mark lockf() __wur [BZ #32800] In commit0476597b28
flock() was marked __wur in posix/unistd.h, but not in io/fcntl.h, the declarations must match. Reviewed-by: Florian Weimer <fweimer@redhat.com> I got programs/locarchive.c: In function ‘open_archive’: programs/locarchive.c:641:18: error: ignoring return value of ‘lockf64’ declared with attribute ‘warn_unused_result’ [-Werror=unused-result] 641 | (void) lockf64 (fd, F_ULOCK, sizeof (struct locarhead)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ programs/locarchive.c:653:14: error: ignoring return value of ‘lockf64’ declared with attribute ‘warn_unused_result’ [-Werror=unused-result] 653 | (void) lockf64 (fd, F_ULOCK, sizeof (struct locarhead)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ programs/locarchive.c:660:14: error: ignoring return value of ‘lockf64’ declared with attribute ‘warn_unused_result’ [-Werror=unused-result] 660 | (void) lockf64 (fd, F_ULOCK, sizeof (struct locarhead)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ programs/locarchive.c:679:14: error: ignoring return value of ‘lockf64’ declared with attribute ‘warn_unused_result’ [-Werror=unused-result] 679 | (void) lockf64 (fd, F_ULOCK, sizeof (struct locarhead)); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Update locarchive.c to always check lockf64 return value. This fixes BZ #33089. Signed-off-by: H.J. Lu <hjl.tools@gmail.com> Reviewed-by: Florian Weimer <fweimer@redhat.com>
This commit is contained in:
parent
81467d4b61
commit
5b7c8d1cd4
|
@ -638,7 +638,8 @@ open_archive (struct locarhandle *ah, bool readonly)
|
|||
|| st.st_dev != st2.st_dev
|
||||
|| st.st_ino != st2.st_ino)
|
||||
{
|
||||
(void) lockf64 (fd, F_ULOCK, sizeof (struct locarhead));
|
||||
if (lockf64 (fd, F_ULOCK, sizeof (struct locarhead)) != 0)
|
||||
error (EXIT_FAILURE, errno, _("cannot unlock archive header"));
|
||||
close (fd);
|
||||
continue;
|
||||
}
|
||||
|
@ -650,14 +651,17 @@ open_archive (struct locarhandle *ah, bool readonly)
|
|||
/* Read the header. */
|
||||
if (TEMP_FAILURE_RETRY (read (fd, &head, sizeof (head))) != sizeof (head))
|
||||
{
|
||||
(void) lockf64 (fd, F_ULOCK, sizeof (struct locarhead));
|
||||
error (EXIT_FAILURE, errno, _("cannot read archive header"));
|
||||
int errval = errno;
|
||||
if (lockf64 (fd, F_ULOCK, sizeof (struct locarhead)) != 0)
|
||||
error (EXIT_FAILURE, errno, _("cannot unlock archive header"));
|
||||
error (EXIT_FAILURE, errval, _("cannot read archive header"));
|
||||
}
|
||||
|
||||
/* Check the magic value */
|
||||
if (GET (head.magic) != AR_MAGIC)
|
||||
{
|
||||
(void) lockf64 (fd, F_ULOCK, sizeof (struct locarhead));
|
||||
if (lockf64 (fd, F_ULOCK, sizeof (struct locarhead)) != 0)
|
||||
error (EXIT_FAILURE, errno, _("cannot unlock archive header"));
|
||||
error (EXIT_FAILURE, 0, _("bad magic value in archive header"));
|
||||
}
|
||||
|
||||
|
@ -676,8 +680,10 @@ open_archive (struct locarhandle *ah, bool readonly)
|
|||
MAP_SHARED | xflags, fd, 0);
|
||||
if (ah->addr == MAP_FAILED)
|
||||
{
|
||||
(void) lockf64 (fd, F_ULOCK, sizeof (struct locarhead));
|
||||
error (EXIT_FAILURE, errno, _("cannot map archive header"));
|
||||
int errval = errno;
|
||||
if (lockf64 (fd, F_ULOCK, sizeof (struct locarhead)) != 0)
|
||||
error (EXIT_FAILURE, errno, _("cannot unlock archive header"));
|
||||
error (EXIT_FAILURE, errval, _("cannot map archive header"));
|
||||
}
|
||||
ah->reserved = reserved;
|
||||
ah->mmap_base = mmap_base;
|
||||
|
|
Loading…
Reference in New Issue