git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Git 1.3.2 on Solaris

From
Linus Torvalds <torvalds@osdl.org>
Date
May 23, 2006, 18:24 UTC
Message-ID
<Pine.LNX.4.64.0605231110230.5623@g5.osdl.org>
In-Reply-To
<19270.1148407414@lotus.CS.Berkeley.EDU>
On Tue, 23 May 2006, Jason Riedy wrote:
Show 11 quoted lines
>
>  - Btw, even SuS says:
> [...]
>  -      New implementations are discouraged from returning X_OK unless at 
>  -      least one execution permission bit is set."
> 
> Now there is one possible, cross-OS problem that I
> haven't tested.  You can chmod a-x and then use
> setfacl to grant one person execute access.  I'm not
> sure if access works in that case, but that might
> possibly just say that current ACL systems are crap.

I absolutely agree. That is why the OS has a "access()" system call. It's there to ask the OS whether the file is executable (or readable/writable).

Otherwise, we'd just do
   static inline int executable(const char *path)
   {
	struct stat st;
	return  !stat(pathname, &st) &&
		S_ISREG(st.st_mode) &&
		(st.st_mode & 0111) != 0;
   }

and be done with it. But exactly because the OS knows what "executable" means, we ask it. We don't know about all the ACL's etc, the OS does.

(Similar issues are true for writability too - the file may be "writable" in the sense that the write permission bits are on, but if the filesystem is mounted read-only, it sure as hell ain't W_OK _anyway_).

> Hmm.  Does access handle SELinux or the other systems?
Yup. 

Modulo bugs, of course, but yes, access() on linux should check both POSIX ACL's and SELinux security extensions. It uses exactly the same code-paths that open()/execve() does: it uses the "vfs_permission()" function which is also what execve() uses.

Now, I think access() actually misses a no-exec mount (it doesn't seem to check MNT_NOEXEC for X_OK), and that looks like it might actually be a real bug.

		Linus
Previous: Jason RiedyNext: Linus Torvalds
Message 19 of 36 in “Git 1.3.2 on Solaris”
  1. Stefan PfetzingMay 16, 2006
  2. Jason RiedyMay 17, 2006
  3. Linus TorvaldsMay 17, 2006
  4. Jason RiedyMay 17, 2006
  5. Linus TorvaldsMay 17, 2006
  6. Stefan PfetzingMay 17, 2006
  7. Linus TorvaldsMay 17, 2006
  8. Stefan PfetzingMay 17, 2006
  9. Linus TorvaldsMay 17, 2006
  10. Jason RiedyMay 17, 2006
  11. Stefan PfetzingMay 23, 2006
  12. Jason RiedyMay 23, 2006
  13. Stefan PfetzingMay 23, 2006
  14. Linus TorvaldsMay 23, 2006
  15. Edgar ToernigMay 23, 2006
  16. Linus TorvaldsMay 23, 2006
  17. Edgar ToernigMay 23, 2006
  18. Jason RiedyMay 23, 2006
  19. Linus TorvaldsMay 23, 2006
  20. Linus TorvaldsMay 23, 2006
  21. Stefan PfetzingMay 26, 2006
  22. Ryan AndersonMay 17, 2006
  23. Junio C HamanoMay 17, 2006
  24. Junio C HamanoMay 17, 2006
  25. builtin-grep: workaround for non GNU grep.Junio C Hamano, May 17, 2006
  26. Linus TorvaldsMay 17, 2006
  27. Junio C HamanoMay 17, 2006
  28. Bertrand JacquinMay 17, 2006
  29. Junio C HamanoMay 17, 2006
  30. Linus TorvaldsMay 17, 2006
  31. Junio C HamanoMay 17, 2006
  32. Linus TorvaldsMay 17, 2006
  33. Junio C HamanoMay 17, 2006
  34. Stefan PfetzingMay 17, 2006
  35. Junio C HamanoMay 17, 2006
  36. Stefan PfetzingMay 17, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.