libclues
Linux C++ Tracing Library
Loading...
Searching...
No Matches
clues::OpenAtSystemCall Struct Reference
+ Inheritance diagram for clues::OpenAtSystemCall:

Public Attributes

item::FileDescriptor fd
 
item::StringData filename
 
item::OpenFlagsValue flags
 
std::optional< item::FileModeParametermode
 
item::FileDescriptor new_fd
 

Protected Member Functions

bool check2ndPass (const Tracee &) override
 Check whether a second pass needs to be made processing parameters.
 
void prepareNewSystemCall () override
 Perform any necessary actions before processing a new system call entry event.
 
void updateFDTracking (const Tracee &) override
 Update file descriptor tracking.
 
- Protected Member Functions inherited from clues::SystemCall
void fillParameters (const Tracee &proc, const SystemCallInfo &info)
 
void setReturnItem (SystemCallItem &ret)
 Sets the return value system call item.
 
void addParameters ()
 
template<typename T, typename... Targs>
void addParameters (T &par, Targs &...rest)
 
template<typename... Targs>
void setParameters (Targs &...args)
 
void dropFD (const Tracee &proc, const cosmos::FileNum num)
 
void trackFD (const Tracee &proc, FDInfo &&info)
 

Additional Inherited Members

- Public Types inherited from clues::SystemCall
using ParameterVector = std::vector<SystemCallItemPtr>
 Vector of the parameters required for a system call.
 
- Public Member Functions inherited from clues::SystemCall
 SystemCall (const SystemCallNr nr)
 Instantiates a new SystemCall object with given properties.
 
 SystemCall (const SystemCall &other)=delete
 
SystemCalloperator= (const SystemCall &other)=delete
 
void setEntryInfo (const Tracee &proc, const SystemCallInfo &info)
 Update the stored parameter values from the given tracee.
 
void setExitInfo (const Tracee &proc, const SystemCallInfo &info)
 Update possible out and return parameter values from the given tracee.
 
std::string_view name () const
 Returns the system call's human readable name.
 
size_t numPars () const
 Returns the number of parameters for this system call.
 
SystemCallNr callNr () const
 Returns the system call table number for this system call.
 
const ParameterVectorparameters () const
 Access to the parameters associated with this system call.
 
SystemCallItemPtr result () const
 Access to the return value parameter associated with this system call.
 
std::optional< ErrnoResulterror () const
 Access to the errno result seen for this system call.
 
bool hasOutParameter () const
 
bool hasResultValue () const
 
bool hasErrorCode () const
 
ABI abi () const
 Returns the system call ABi seen during system call entry.
 
bool is32BitEmulationABI () const
 
const SystemCallInfocurrentInfo () const
 Access the current SystemCallInfo if currently processing syscall entry/exit.
 
- Static Public Member Functions inherited from clues::SystemCall
static const char * name (const SystemCallNr nr)
 Returns the name of the given system call or "<unknown>" if unknown.
 
static bool validNr (const SystemCallNr nr)
 Returns whether the given system call number is in a valid range.
 
- Protected Attributes inherited from clues::SystemCall
SystemCallNr m_nr
 The raw system call number of the system call.
 
const std::string_view m_name
 The basic name of the system call.
 
const SystemCallInfom_info = nullptr
 Current system call info during entry/exit processing, nullptr otherwise.
 
SystemCallItemPtr m_return
 The return value of the system call.
 
std::optional< ErrnoResultm_error
 If the system call fails, this is the error code.
 
ParameterVector m_pars
 The array of system call parameters, if any.
 
ABI m_abi = ABI::UNKNOWN
 The current system call ABI which is in effect.
 

Detailed Description

Definition at line 184 of file fs.hxx.

Constructor & Destructor Documentation

◆ OpenAtSystemCall()

clues::OpenAtSystemCall::OpenAtSystemCall ( )
inline

Definition at line 187 of file fs.hxx.

187 :
188 SystemCall{SystemCallNr::OPENAT},
189 fd{ItemType::PARAM_IN, item::AtSemantics{true}},
190 filename{"filename"},
191 new_fd{ItemType::RETVAL} {
192 setReturnItem(new_fd);
193 setParameters(fd, filename, flags);
194 }
void setReturnItem(SystemCallItem &ret)
Sets the return value system call item.
SystemCall(const SystemCallNr nr)
Instantiates a new SystemCall object with given properties.
@ PARAM_IN
An input parameter to the system call.
@ RETVAL
A system call return value.

Member Function Documentation

◆ check2ndPass()

bool clues::OpenAtSystemCall::check2ndPass ( const Tracee & )
overrideprotectedvirtual

Check whether a second pass needs to be made processing parameters.

This function can be overridden by the actual system call implementation to perform context-sensitive evaluation of system call parameters (e.g. for ioctl() style system calls) upon system call entry.

The implementation of this function is allowed to modify the amount and types of system call parameters and return parameter. In this case true must be returned to let the base class implementation reevaluate all system call parameters.

Reimplemented from clues::SystemCall.

Definition at line 216 of file fs.cxx.

216 {
217 using enum cosmos::OpenFlag;
218
219 if (const auto _flags = flags.flags(); _flags[CREATE] || _flags[TMPFILE]) {
220 mode.emplace(item::FileModeParameter{});
221 addParameters(*mode);
222 return true;
223 }
224
225 return false;
226}

◆ prepareNewSystemCall()

void clues::OpenAtSystemCall::prepareNewSystemCall ( )
overrideprotectedvirtual

Perform any necessary actions before processing a new system call entry event.

Reimplemented from clues::SystemCall.

Definition at line 211 of file fs.cxx.

211 {
212 m_pars.erase(m_pars.begin() + 3, m_pars.end());
213 mode.reset();
214}
ParameterVector m_pars
The array of system call parameters, if any.

◆ updateFDTracking()

void clues::OpenAtSystemCall::updateFDTracking ( const Tracee & proc)
overrideprotectedvirtual

Update file descriptor tracking.

This function is called upon successful system call exit to track any potential new file descriptors or stop tracking of existing file descriptors.

Specializations of SystemCall that create or close file descriptors need to overwrite this function and call proc.trackFD() or proc.dropFD() accordingly.

Reimplemented from clues::SystemCall.

Definition at line 228 of file fs.cxx.

228 {
229 FDInfo info{FDInfo::Type::FS_PATH, new_fd.fd()};
230 info.path = filename.str();
231 info.mode = flags.mode();
232 info.flags = flags.flags();
233 trackFD(proc, std::move(info));
234}
@ FS_PATH
a path opened on the file system (this can still be a device special file, named pipe,...
Definition types.hxx:88

Member Data Documentation

◆ fd

item::FileDescriptor clues::OpenAtSystemCall::fd

Definition at line 197 of file fs.hxx.

◆ filename

item::StringData clues::OpenAtSystemCall::filename

Definition at line 198 of file fs.hxx.

◆ flags

item::OpenFlagsValue clues::OpenAtSystemCall::flags

Definition at line 199 of file fs.hxx.

◆ mode

std::optional<item::FileModeParameter> clues::OpenAtSystemCall::mode

Definition at line 200 of file fs.hxx.

◆ new_fd

item::FileDescriptor clues::OpenAtSystemCall::new_fd

Definition at line 203 of file fs.hxx.


The documentation for this struct was generated from the following files: