]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
ls: fix crash of "ls -Z ." on OpenBSD's /dev/wd0a disk
authorBruno Haible <bruno@clisp.org>
Tue, 8 Apr 2025 10:14:29 +0000 (12:14 +0200)
committerPádraig Brady <P@draigBrady.com>
Tue, 8 Apr 2025 11:02:13 +0000 (12:02 +0100)
* src/ls.c (file_has_aclinfo_cache): Add new static variable
'unsupported_cached'. Don't assume that device 0 never occurs.

src/ls.c

index 6690f7747e3d19136a109719ba1088b2eff37eff..de5a1ae2b901986677c4328527a5b1a814b3af42 100644 (file)
--- a/src/ls.c
+++ b/src/ls.c
@@ -3309,12 +3309,13 @@ file_has_aclinfo_cache (char const *file, struct fileinfo *f,
 {
   /* st_dev and associated info for the most recently processed device
      for which file_has_aclinfo failed indicating lack of support.  */
+  static bool unsupported_cached /* = false */;
   static int unsupported_return;
   static char *unsupported_scontext;
   static int unsupported_scontext_err;
   static dev_t unsupported_device;
 
-  if (f->stat_ok && f->stat.st_dev == unsupported_device)
+  if (f->stat_ok && unsupported_cached && f->stat.st_dev == unsupported_device)
     {
       ai->buf = ai->u.__gl_acl_ch;
       ai->size = 0;
@@ -3330,6 +3331,7 @@ file_has_aclinfo_cache (char const *file, struct fileinfo *f,
   if (f->stat_ok && n <= 0 && !acl_errno_valid (err)
       && (!(flags & ACL_GET_SCONTEXT) || !acl_errno_valid (ai->scontext_err)))
     {
+      unsupported_cached = true;
       unsupported_return = n;
       unsupported_scontext = ai->scontext;
       unsupported_scontext_err = ai->scontext_err;