|
@@ -757,8 +757,16 @@ nfsd_open(struct svc_rqst *rqstp, struct svc_fh *fhp, umode_t type,
|
|
* If we get here, then the client has already done an "open",
|
|
* If we get here, then the client has already done an "open",
|
|
* and (hopefully) checked permission - so allow OWNER_OVERRIDE
|
|
* and (hopefully) checked permission - so allow OWNER_OVERRIDE
|
|
* in case a chmod has now revoked permission.
|
|
* in case a chmod has now revoked permission.
|
|
|
|
+ *
|
|
|
|
+ * Arguably we should also allow the owner override for
|
|
|
|
+ * directories, but we never have and it doesn't seem to have
|
|
|
|
+ * caused anyone a problem. If we were to change this, note
|
|
|
|
+ * also that our filldir callbacks would need a variant of
|
|
|
|
+ * lookup_one_len that doesn't check permissions.
|
|
*/
|
|
*/
|
|
- err = fh_verify(rqstp, fhp, type, may_flags | NFSD_MAY_OWNER_OVERRIDE);
|
|
|
|
|
|
+ if (type == S_IFREG)
|
|
|
|
+ may_flags |= NFSD_MAY_OWNER_OVERRIDE;
|
|
|
|
+ err = fh_verify(rqstp, fhp, type, may_flags);
|
|
if (err)
|
|
if (err)
|
|
goto out;
|
|
goto out;
|
|
|
|
|