Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pyplugins/actuation/vpn.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ def __init__(self, panda) -> None:

self.outdir = self.get_arg("outdir")

if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")

# TODO: add option on whether or not to pass -o to host vpn
Expand Down
4 changes: 2 additions & 2 deletions pyplugins/analysis/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def __init__(self):
self.env_vars = set() # set of env vars that were read through libc getenv
self.uboot_vars = set() # set of env vars that were read through libc getenv
self.mtd_vars = set() # set of mtd partitions read out of /proc/mtd
if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")

self.default_env_vars = DEFAULT_ENV_VARS
Expand Down Expand Up @@ -214,7 +214,7 @@ def __init__(self):
# this hurts performance, but without it we definitely miss some comparisons
# in targetcmp/callwitharg/callstack_instr.
panda.disable_tb_chaining()
if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")

self.outdir = self.get_arg("outdir")
Expand Down
2 changes: 1 addition & 1 deletion pyplugins/analysis/interfaces.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class Interfaces(Plugin):
def __init__(self):
self.outdir = self.get_arg("outdir")
self.conf = self.get_arg("conf")
if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")

open(f"{self.outdir}/{iface_log}", "w").close()
Expand Down
2 changes: 1 addition & 1 deletion pyplugins/apis/send_hypercall.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def __init__(self) -> None:
Sets up logging, event registration, and subscribes to the igloo_send_hypercall event.
"""
self.outdir = self.get_arg("outdir")
if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")
self.registered_events: Dict[str, Callable[...,
Tuple[int, Union[str, bytes]]]] = {}
Expand Down
2 changes: 1 addition & 1 deletion pyplugins/apis/uprobes.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class Uprobes(Plugin):
def __init__(self):
self.outdir = self.get_arg("outdir")
self.projdir = self.get_arg("proj_dir")
if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")
self.libsymbols = os.path.join(
self.projdir, "static", "LibrarySymbols.json.xz")
Expand Down
2 changes: 1 addition & 1 deletion pyplugins/hyper/bash_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def __init__(self) -> None:
**Returns:** None
"""
self.outdir = self.get_arg("outdir")
if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")

# Bash
Expand Down
2 changes: 1 addition & 1 deletion pyplugins/hyper/canary.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def __init__(self) -> None:
"""
self.outdir = self.get_arg("outdir")

if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")

@plugins.SendHypercall.subscribe("canary")
Expand Down
2 changes: 0 additions & 2 deletions pyplugins/hyper/portal.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,6 @@ def __init__(self) -> None:
**Returns:** None
"""
self.outdir = self.get_arg("outdir")
# if self.get_arg_bool("verbose"):
# self.logger.setLevel("DEBUG")
# Set endianness format character for struct operations
self.endian_format = '<' if self.panda.endianness == 'little' else '>'
self.portal_interrupt = None
Expand Down
2 changes: 1 addition & 1 deletion pyplugins/hyper/shell.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ def __init__(self, panda: Any) -> None:
self.read_scripts = {} # filename -> contents
self.last_line = None

if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")

# initialize outfiles:
Expand Down
2 changes: 1 addition & 1 deletion pyplugins/hyper/uboot.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def __init__(self) -> None:
open(os.path.join(self.outdir, UBOOT_LOG), "w").close()
self.uboot_log = set()

if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")

# U-Boot
Expand Down
2 changes: 1 addition & 1 deletion pyplugins/interventions/lifeguard.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ def __init__(self, panda: object) -> None:
"""
self.panda = panda
self.outdir = self.get_arg("outdir")
if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")

self.blocked_signals = []
Expand Down
2 changes: 1 addition & 1 deletion pyplugins/interventions/mount.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ def __init__(self):
self.mounts = set()
self.fake_mounts = self.get_arg("fake_mounts") or []
self.all_succeed = self.get_arg("all_succeed") or False
if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")

plugins.syscalls.syscall("on_sys_mount_return")(self.post_mount)
Expand Down
2 changes: 1 addition & 1 deletion pyplugins/interventions/nvram2.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def __init__(self):
- None
"""
self.outdir = self.get_arg("outdir")
if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")
# Even at debug level, logging every nvram get/clear can be very verbose.
# As such, we only debug log nvram sets
Expand Down
2 changes: 1 addition & 1 deletion pyplugins/interventions/pseudofiles.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ def __init__(self):
self.outdir = self.get_arg("outdir")
self.proj_dir = self.get_arg("proj_dir")
self.written_data = {} # filename -> data that was written to it
if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel(logging.DEBUG)
self.did_mtd_warn = False # Set if we've warned about misconfigured MTD devices
# XXX: It has seemed like this should be 1 for some architectures, but
Expand Down
2 changes: 1 addition & 1 deletion pyplugins/loggers/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ def __init__(self) -> None:
self.finished_worker = Event()
self.initialized_db = False

if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")

# Start the background flush thread
Expand Down
2 changes: 1 addition & 1 deletion pyplugins/testing/ioctl_interaction_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
class TestIoctlInteraction(Plugin):
def __init__(self):
self.outdir = self.get_arg("outdir")
if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")

@plugins.syscalls.syscall("on_sys_ioctl_return", arg_filters=[None, SIOCDEVPRIVATE])
Expand Down
2 changes: 1 addition & 1 deletion pyplugins/testing/kffi_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
class KFFITest(Plugin):
def __init__(self):
self.outdir = self.get_arg("outdir")
if self.get_arg_bool("verbose"):
if self.get_arg_bool("penguin_verbose"):
self.logger.setLevel("DEBUG")

@syscalls.syscall("on_sys_ioctl_return", arg_filters=[0x14, 0x15, 0x16])
Expand Down
2 changes: 0 additions & 2 deletions pyplugins/testing/portal_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ class PortalTest(Plugin):
def __init__(self, panda):
self.panda = panda
self.outdir = self.get_arg("outdir")
# if self.get_arg_bool("verbose"):
# self.logger.setLevel("DEBUG")

'''
This test checks that we can get information from our program, its arguments,
Expand Down
2 changes: 1 addition & 1 deletion src/penguin/penguin_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -542,7 +542,7 @@ def run_config(
"fs": config_fs,
"fw": config_image,
"outdir": out_dir,
"verbose": verbose,
"penguin_verbose": verbose,
"telnet_port": telnet_port,
}
args.update(vpn_args)
Expand Down
26 changes: 26 additions & 0 deletions src/penguin/plugin_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,30 @@ def __preinit__(self, plugins: 'IGLOOPluginManager', args: Dict) -> None:
"""
self.plugins = plugins
self.args = args
self._initialize_logger()

def _set_level_arg(self, level: Union[str, bool, int]) -> None:
Copy link

Copilot AI Jul 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The method parameter is named 'level' but the method implementation retrieves values from self.args instead of using the passed parameter. Either use the parameter or remove it and pass the argument value directly.

Suggested change
def _set_level_arg(self, level: Union[str, bool, int]) -> None:
def _set_level_arg(self) -> None:

Copilot uses AI. Check for mistakes.
# The verbose argument is used to set the logger level
Copy link

Copilot AI Jul 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment is misleading since this method handles both 'verbose' and 'loglevel' arguments, not just verbose. Update the comment to reflect that it handles any log level argument.

Suggested change
# The verbose argument is used to set the logger level
# This method sets the logger level based on the provided log level argument (e.g., 'verbose' or 'loglevel').

Copilot uses AI. Check for mistakes.
verbose_arg = self.args.get("verbose", False)
if isinstance(verbose_arg, bool):
if verbose_arg is True:
self.logger.setLevel("DEBUG")
elif isinstance(verbose_arg, int) or isinstance(verbose_arg, str):
# If verbose is an int, set the logger level to that value
Comment on lines +75 to +76
Copy link

Copilot AI Jul 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use 'isinstance(verbose_arg, (int, str))' instead of separate isinstance checks for better readability and performance.

Suggested change
elif isinstance(verbose_arg, int) or isinstance(verbose_arg, str):
# If verbose is an int, set the logger level to that value
elif isinstance(verbose_arg, (int, str)):
# If verbose is an int or str, set the logger level to that value

Copilot uses AI. Check for mistakes.
self.logger.setLevel(verbose_arg)
else:
raise ValueError(
f"Unsupported verbose argument type: {type(verbose_arg)}. Expected bool, int, or str.")

def _initialize_logger(self):
logname = camel_to_snake(self.name)
self.logger = getColoredLogger(f"plugins.{logname}")
if self.args.get("verbose", None) is not None:
# If verbose is set, set the logger level to DEBUG
self._set_level_arg(self.args["verbose"])
elif self.args.get("loglevel", None) is not None:
# If loglevel is set, set the logger level to that value
self._set_level_arg(self.args["loglevel"])

@property
def name(self) -> str:
Expand Down Expand Up @@ -263,6 +285,10 @@ def initialize(self, panda: Panda, args: Dict[str, Any]) -> None:
self.args = args
self.logger = getColoredLogger("penguin.plugin_manger")

# Set the logger level based on the 'penguin_verbose' argument
if self.args.get("penguin_verbose", False):
self.logger.setLevel("DEBUG")

self.plugin_cbs: Dict[Plugin, Dict[str, List[Callable]]] = {}
self.registered_cbs: Dict[Tuple[Plugin, str], Callable] = {}
self.aliases: Dict[str, str] = {}
Expand Down
Loading