Skip to content

Shell built-ins fail to run with the new tracer #75

@gliargovas

Description

@gliargovas

Shell built-ins cannot be traced by strace.

This also raises a question about what commands should be speculated or not. Currently, we try to speculate everything except for some hard-coded built-ins (unsafe nodes) (i.e., break, continue). To resolve these, we stop any further speculation, run the node on the system's shell, and restart everything that is after the unsafe node

Current speculation is that we can be sound by:

  1. resolving aliases and expanding fully
  2. checking if the command is a special builtin (in a hardcoded list for bash special builtins)
  3. checking that it is not a function
  4. checking if the command is in the utility hardcoded list (including cd etc)

Regarding (4):

Some special built-ins that we can rule out without any further checks include the following (these should probably be treated as unsafe):

break, colon, continue, dot, eval, exec, exit, export, readonly, return, set, shift, times, trap, unset.

Some non-special built-ins that we can rule out without any further checks include the following (most of these won't break strace, with some exceptions -- special-utilities):
alias, bg, cd, command, fg, hash, jobs, local, pushd, popd, umask, type, and, depending on the shell, echo, kill, printf, pwd.

More details here.

We can define the built-in list for each shell on setup maybe by running type on the setup of hs, not while speculating, for overhead reasons. We could instead see an strace path failure and then use type to confirm it's builtin and then remember that for the rest of the run (i.e., add it to BASH_PRIMITIVES)

It might also make sense to keep track of the uses of alias and unalias in the system. For this, as we're running, we should observe any use of alias or unalias. hand that off directly to the shell and call setalias on the parser library.

See analysis.py.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions