mirror of
https://github.com/torvalds/linux.git
synced 2026-09-12 04:23:03 +02:00
A small fixup for the new nearfull_sync mount option, a potential
use-after-free fix (marked for stable) and a patch that eliminates the last use of PageWriteback macro in the tree. -----BEGIN PGP SIGNATURE----- iQFHBAABCgAxFiEEydHwtzie9C7TfviiSn/eOAIR84sFAmqa/nETHGlkcnlvbW92 QGdtYWlsLmNvbQAKCRBKf944AhHzi7qLB/4gfbxdP5lystLHoDbwSo+ceM15Apl+ THXVTBGspHNe5w07/fk1NfSk8KccqN66cCh9W23JMZt2PQr+n5/0Azp+ZkcL+koO CNNhvachvs+E3J5cRNHvvP3PCQurOO0tCO4vGGHRt6j3VTrWdwKkgVHGHu2hZ49q GLkm82eUKYkZdV80FV31q1ZdXHQBCAuxkBgRQNbqlc9yj3OA6UoxLsAaB3uxvmKq sifdvIyWFt/+SdntzoM6Dt4vo6P0/RiQJdIXKLj+fxHFiJEeX0IJaTpZvA7FOHOt DyRMhb3lTzQBDjZydNQO15XcjfifskuqeQxxSQmISv7lASiUkq5Tn+uj =p61q -----END PGP SIGNATURE----- Merge tag 'ceph-for-7.3-rc2' of https://github.com/ceph/ceph-client Pull ceph fixes from Ilya Dryomov: "A small fixup for the new nearfull_sync mount option, a potential use-after-free fix (marked for stable) and a patch that eliminates the last use of PageWriteback macro in the tree" * tag 'ceph-for-7.3-rc2' of https://github.com/ceph/ceph-client: ceph: apply nearfull_sync option on remount libceph: remove pinning assertion in ceph_msg_data_iter_next() ceph: lock mutex in ceph_mds_check_access()
This commit is contained in:
commit
408802f1e6
|
|
@ -6600,11 +6600,13 @@ int ceph_mds_check_access(struct ceph_mds_client *mdsc, char *tpath, int mask)
|
|||
doutc(cl, "tpath '%s', mask %d, caller_uid %d, caller_gid %d\n",
|
||||
tpath, mask, caller_uid, caller_gid);
|
||||
|
||||
mutex_lock(&mdsc->mutex);
|
||||
for (i = 0; i < mdsc->s_cap_auths_num; i++) {
|
||||
struct ceph_mds_cap_auth *s = &mdsc->s_cap_auths[i];
|
||||
|
||||
err = ceph_mds_auth_match(mdsc, s, cred, tpath);
|
||||
if (err < 0) {
|
||||
mutex_unlock(&mdsc->mutex);
|
||||
put_cred(cred);
|
||||
return err;
|
||||
} else if (err > 0) {
|
||||
|
|
@ -6626,6 +6628,7 @@ int ceph_mds_check_access(struct ceph_mds_client *mdsc, char *tpath, int mask)
|
|||
doutc(cl, "root_squash_perms %d, rw_perms_s %p\n", root_squash_perms,
|
||||
rw_perms_s);
|
||||
if (root_squash_perms && rw_perms_s == NULL) {
|
||||
mutex_unlock(&mdsc->mutex);
|
||||
doutc(cl, "access allowed\n");
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -6640,6 +6643,7 @@ int ceph_mds_check_access(struct ceph_mds_client *mdsc, char *tpath, int mask)
|
|||
!!(mask & MAY_READ), !!(mask & MAY_WRITE));
|
||||
}
|
||||
doutc(cl, "access denied\n");
|
||||
mutex_unlock(&mdsc->mutex);
|
||||
return -EACCES;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -604,6 +604,7 @@ struct ceph_mds_client {
|
|||
struct rw_semaphore pool_perm_rwsem;
|
||||
struct rb_root pool_perm_tree;
|
||||
|
||||
/* protected by mutex */
|
||||
u32 s_cap_auths_num;
|
||||
struct ceph_mds_cap_auth *s_cap_auths;
|
||||
|
||||
|
|
|
|||
|
|
@ -1420,6 +1420,11 @@ static int ceph_reconfigure_fc(struct fs_context *fc)
|
|||
else
|
||||
ceph_clear_mount_opt(fsc, SPARSEREAD);
|
||||
|
||||
if (fsopt->flags & CEPH_MOUNT_OPT_NEARFULL_SYNC)
|
||||
ceph_set_mount_opt(fsc, NEARFULL_SYNC);
|
||||
else
|
||||
ceph_clear_mount_opt(fsc, NEARFULL_SYNC);
|
||||
|
||||
if (strcmp_null(fsc->mount_options->mon_addr, fsopt->mon_addr)) {
|
||||
kfree(fsc->mount_options->mon_addr);
|
||||
fsc->mount_options->mon_addr = fsopt->mon_addr;
|
||||
|
|
|
|||
|
|
@ -1003,7 +1003,6 @@ static struct page *ceph_msg_data_iter_next(struct ceph_msg_data_cursor *cursor,
|
|||
* we'll get an iov_iter_get_pages2 variant that doesn't take
|
||||
* page refs. Until then, just put the page ref.
|
||||
*/
|
||||
VM_BUG_ON_PAGE(!PageWriteback(page) && page_count(page) < 2, page);
|
||||
put_page(page);
|
||||
|
||||
*length = min_t(size_t, len, cursor->resid);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user