mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 17:37:37 +00:00
Kernel: Clarify ambiguous {File,Description}::absolute_path
Found due to smelly code in InodeFile::absolute_path. In particular, this replaces the following misleading methods: File::absolute_path This method *never* returns an actual path, and if called on an InodeFile (which is impossible), it would VERIFY_NOT_REACHED(). OpenFileDescription::try_serialize_absolute_path OpenFileDescription::absolute_path These methods do not guarantee to return an actual path (just like the other method), and just like Custody::absolute_path they do not guarantee accuracy. In particular, just renaming the method made a TOCTOU bug obvious. The new method signatures use KResultOr, just like try_serialize_absolute_path() already did.
This commit is contained in:
parent
88ca12f037
commit
c05c5a7ff4
28 changed files with 83 additions and 65 deletions
|
@ -140,18 +140,9 @@ Device::~Device()
|
|||
VERIFY(m_state == State::BeingRemoved);
|
||||
}
|
||||
|
||||
String Device::absolute_path() const
|
||||
KResultOr<NonnullOwnPtr<KString>> Device::pseudo_path(const OpenFileDescription&) const
|
||||
{
|
||||
// FIXME: I assume we can't really provide a well known path in the kernel
|
||||
// because this is a violation of abstraction layers between userland and the
|
||||
// kernel, but maybe the whole name of "absolute_path" is just wrong as this
|
||||
// is really not an "absolute_path".
|
||||
return String::formatted("device:{},{}", major(), minor());
|
||||
}
|
||||
|
||||
String Device::absolute_path(const OpenFileDescription&) const
|
||||
{
|
||||
return absolute_path();
|
||||
return KString::try_create(String::formatted("device:{},{}", major(), minor()));
|
||||
}
|
||||
|
||||
void Device::process_next_queued_request(Badge<AsyncDeviceRequest>, const AsyncDeviceRequest& completed_request)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue