named-data-iot/ndn-lite

ndn_sig_verifier_verify_data is not reentrant

Opened this issue · 0 comments

The function writes into a global variable m_userdata. Consequently, if the application invokes ndn_sig_verifier_verify_data with a new Data packet before the previous validation has completed, undefined behavior may occur.

static ndn_sig_verifier_userdata_t m_userdata;
static ndn_sig_verifier_state_t m_sig_verifier_state;
static uint8_t verifier_buf[4096];

m_userdata.is_interest = false;
m_userdata.original_pkt = (void*)&data;
m_userdata.on_success_cbk = on_success;
m_userdata.on_failure_cbk = on_failure;

To solve this issue:

  1. Introduce a ndn_sig_verifier_verify_data_r function that accepts a context argument to carry per-validation state, to be used in place of the global variable(s). The calling application is responsible for allocating memory (either statically or dynamically) for the context struct.
  2. Implement ndn_sig_verifier_verify_data as a wrapper of ndn_sig_verifier_verify_data that uses global variable or function-scope static variable as context.
  3. Update the documentation of ndn_sig_verifier_verify_data to note the non-reentrancy limitation.