diff options
| author | HiFiPhile <[email protected]> | 2026-07-19 20:39:02 +0200 |
|---|---|---|
| committer | HiFiPhile <[email protected]> | 2026-07-19 21:01:43 +0200 |
| commit | 1c3470a71e3755e6919cb7bd1a5d07f1985c8bb9 (patch) | |
| tree | 7d6216c68e7921729a544c7a744fb2672b280f83 /src/tusb_option.h | |
| parent | ea88d2f530e11702a7bfc5aa882e8e659a677681 (diff) | |
improve validation structure
Signed-off-by: HiFiPhile <[email protected]>
Diffstat (limited to 'src/tusb_option.h')
| -rw-r--r-- | src/tusb_option.h | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/src/tusb_option.h b/src/tusb_option.h index de8439cfb..75c8ff93d 100644 --- a/src/tusb_option.h +++ b/src/tusb_option.h @@ -240,13 +240,14 @@ #define OPT_MODE_SPEED_MASK 0xff00u //--------------------------------------------------------------------+ -// Descriptor Validation Level -// How much the stack hardens itself against mal-configured or hostile devices, traded against code size. -// Higher levels add more checks; set CFG_TUD_VALIDATION_LEVEL / CFG_TUH_VALIDATION_LEVEL to pick one. +// Validation Level +// Optional validation of data received from the USB peer, traded against code size. Coverage is parser-specific +// and expanded incrementally. CFG_TUSB_VALIDATION_LEVEL sets the default for both device and host; use the +// CFG_TUD_VALIDATION_LEVEL / CFG_TUH_VALIDATION_LEVEL overrides when the roles need different policies. //--------------------------------------------------------------------+ -#define TUSB_VALIDATION_NONE 0 ///< trusted devices only, minimal code size -#define TUSB_VALIDATION_BASIC 1 ///< default: mal-configured devices, no OOB reads / zero-length loops -#define TUSB_VALIDATION_STRICT 2 ///< reject malformed/hostile descriptors, stricter class validation +#define TUSB_VALIDATION_NONE 0 ///< trusted peers, minimal code size +#define TUSB_VALIDATION_BASIC 1 ///< structural memory-safety checks where supported +#define TUSB_VALIDATION_STRICT 2 ///< additional USB and class-specific conformance checks //--------------------------------------------------------------------+ // Include tusb_config.h @@ -262,6 +263,46 @@ #include "common/tusb_mcu.h" //--------------------------------------------------------------------+ +// Validation Options +//--------------------------------------------------------------------+ + +#ifndef CFG_TUSB_VALIDATION_LEVEL + #define CFG_TUSB_VALIDATION_LEVEL TUSB_VALIDATION_BASIC +#endif + +#ifndef CFG_TUD_VALIDATION_LEVEL + #define CFG_TUD_VALIDATION_LEVEL CFG_TUSB_VALIDATION_LEVEL +#endif + +#ifndef CFG_TUH_VALIDATION_LEVEL + #define CFG_TUH_VALIDATION_LEVEL CFG_TUSB_VALIDATION_LEVEL +#endif + +#if (CFG_TUSB_VALIDATION_LEVEL < TUSB_VALIDATION_NONE) || \ + (CFG_TUSB_VALIDATION_LEVEL > TUSB_VALIDATION_STRICT) + #error "CFG_TUSB_VALIDATION_LEVEL must be TUSB_VALIDATION_NONE, TUSB_VALIDATION_BASIC, or TUSB_VALIDATION_STRICT" +#endif + +#if (CFG_TUD_VALIDATION_LEVEL < TUSB_VALIDATION_NONE) || \ + (CFG_TUD_VALIDATION_LEVEL > TUSB_VALIDATION_STRICT) + #error "CFG_TUD_VALIDATION_LEVEL must be TUSB_VALIDATION_NONE, TUSB_VALIDATION_BASIC, or TUSB_VALIDATION_STRICT" +#endif + +#if (CFG_TUH_VALIDATION_LEVEL < TUSB_VALIDATION_NONE) || \ + (CFG_TUH_VALIDATION_LEVEL > TUSB_VALIDATION_STRICT) + #error "CFG_TUH_VALIDATION_LEVEL must be TUSB_VALIDATION_NONE, TUSB_VALIDATION_BASIC, or TUSB_VALIDATION_STRICT" +#endif + +// Validation conditions are short-circuited at lower levels and compile out when the result is unused. +#define TUD_VALIDATION_CHECK(_level, _cond) ((CFG_TUD_VALIDATION_LEVEL < (_level)) || (_cond)) +#define TUH_VALIDATION_CHECK(_level, _cond) ((CFG_TUH_VALIDATION_LEVEL < (_level)) || (_cond)) + +#define TUD_VALIDATE_BASIC(_cond) TUD_VALIDATION_CHECK(TUSB_VALIDATION_BASIC, _cond) +#define TUH_VALIDATE_BASIC(_cond) TUH_VALIDATION_CHECK(TUSB_VALIDATION_BASIC, _cond) +#define TUD_VALIDATE_STRICT(_cond) TUD_VALIDATION_CHECK(TUSB_VALIDATION_STRICT, _cond) +#define TUH_VALIDATE_STRICT(_cond) TUH_VALIDATION_CHECK(TUSB_VALIDATION_STRICT, _cond) + +//--------------------------------------------------------------------+ // USBIP //--------------------------------------------------------------------+ @@ -704,9 +745,6 @@ #define CFG_TUH_ENUMERATION_BUFSIZE 256 #endif - #ifndef CFG_TUH_VALIDATION_LEVEL - #define CFG_TUH_VALIDATION_LEVEL TUSB_VALIDATION_BASIC - #endif #endif // CFG_TUH_ENABLED // Attribute to place data in accessible RAM for host controller (default: CFG_TUSB_MEM_SECTION) |
