Commit 0ea8570
committed
mds: use available CInode* for uninline data
This is a null pointer dereference issue and it happens as follows:
Uninline Data is not a regular client request ... it is an Internal Request.
So, there's no client request struct allocated and assigned in the mdr to
begin with.
In the scrubbing path, the auth validation is already done in
ScrubStack::kick_off_scrubs() ... and since Uninline Data path piggybacks
on the scrubbing path, we get the auth validation for free.
rdlock_path_pin_ref(), fails to lock the path if the lock is already taken.
This is what happens in the Uninline Data case. So rdlock_path_pin_ref()
creates a C_MDS_RetryRequest and this causes the request to be re-attempted
in the regular client request path where Server::handle_client_request()
assumes that the mdr->client_request member is valid ...
and hence the null pointer dereference issue.
---
Since the scrub path dequeues the CInode* from the ScrubStack, this
commit attempts to use the already available CInode*.
Fixes: https://tracker.ceph.com/issues/70624
Signed-off-by: Milind Changire <[email protected]>1 parent e1f7b2c commit 0ea8570
2 files changed
+11
-6
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13487 | 13487 | | |
13488 | 13488 | | |
13489 | 13489 | | |
13490 | | - | |
| 13490 | + | |
13491 | 13491 | | |
13492 | 13492 | | |
13493 | 13493 | | |
| |||
13504 | 13504 | | |
13505 | 13505 | | |
13506 | 13506 | | |
| 13507 | + | |
13507 | 13508 | | |
13508 | 13509 | | |
13509 | 13510 | | |
| |||
13520 | 13521 | | |
13521 | 13522 | | |
13522 | 13523 | | |
13523 | | - | |
| 13524 | + | |
| 13525 | + | |
| 13526 | + | |
13524 | 13527 | | |
13525 | 13528 | | |
13526 | 13529 | | |
| |||
13534 | 13537 | | |
13535 | 13538 | | |
13536 | 13539 | | |
| 13540 | + | |
13537 | 13541 | | |
13538 | 13542 | | |
13539 | 13543 | | |
| |||
13575 | 13579 | | |
13576 | 13580 | | |
13577 | 13581 | | |
13578 | | - | |
| 13582 | + | |
13579 | 13583 | | |
13580 | | - | |
13581 | | - | |
13582 | | - | |
| 13584 | + | |
13583 | 13585 | | |
13584 | 13586 | | |
13585 | 13587 | | |
| |||
13594 | 13596 | | |
13595 | 13597 | | |
13596 | 13598 | | |
| 13599 | + | |
13597 | 13600 | | |
13598 | 13601 | | |
13599 | 13602 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1382 | 1382 | | |
1383 | 1383 | | |
1384 | 1384 | | |
| 1385 | + | |
1385 | 1386 | | |
| 1387 | + | |
1386 | 1388 | | |
1387 | 1389 | | |
1388 | 1390 | | |
| |||
0 commit comments