According to [1], these bits should be cleared regardless of any exe bits on
the file. Also, add the required non-zero write check.
[1] http://pubs.opengroup.org/onlinepubs/
9699919799/functions/pwrite.html
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
return r;
/* clear the setuid/setgid bits, if any */
- if (unlikely((in->mode & S_ISUID) ||
- (in->mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP))) {
+ if (unlikely(in->mode & (S_ISUID|S_ISGID)) && size > 0) {
struct ceph_statx stx = { 0 };
put_cap_ref(in, CEPH_CAP_AUTH_SHARED);