Skip to content

Commit

Permalink
Update command handler process() callback return value type
Browse files Browse the repository at this point in the history
The partial move from returning int to returning enum sigma_cmd_result
was problematic for LLVM/Clang Control Flow Integrity (CFI) sanitizer.
With CFI, the function pointers are verified to have the same type as
the actual callback function and enum is not considered to match int in
that context. This results in sigma_dut terminating if CFI is enabled
for the build. Avoid this by updating the process() callback functions
to use the exact same type as the function pointer.

This was done with following semantic patch and manual cleanup to remove
functions that matched but were not used as registered callbacks (those
functions can be addressed separately as cleanup since they do not cause
issues with CFI) and with coding style cleanup for indentation.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
  • Loading branch information
Jouni Malinen committed Jun 12, 2019
1 parent c1735d5 commit f722271
Show file tree
Hide file tree
Showing 5 changed files with 343 additions and 268 deletions.
122 changes: 72 additions & 50 deletions ap.c
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,9 @@ static int ap_ft_enabled(struct sigma_dut *dut)
}


static int cmd_ap_ca_version(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_ca_version(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
/* const char *name = get_param(cmd, "NAME"); */
send_resp(dut, conn, SIGMA_COMPLETE, "version,1.0");
Expand Down Expand Up @@ -457,8 +458,9 @@ static void set_ap_country_code(struct sigma_dut *dut)
}


static int cmd_ap_set_wireless(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_set_wireless(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
/* const char *name = get_param(cmd, "NAME"); */
/* const char *ifname = get_param(cmd, "INTERFACE"); */
Expand Down Expand Up @@ -1719,8 +1721,9 @@ static int ath10k_ap_send_addba_req(struct sigma_dut *dut,
}


static int cmd_ap_send_addba_req(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_send_addba_req(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
/* const char *name = get_param(cmd, "NAME"); */
/* const char *ifname = get_param(cmd, "INTERFACE"); */
Expand Down Expand Up @@ -1760,8 +1763,9 @@ static int cmd_ap_send_addba_req(struct sigma_dut *dut, struct sigma_conn *conn,
}


static int cmd_ap_set_security(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_set_security(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
/* const char *name = get_param(cmd, "NAME"); */
const char *val;
Expand Down Expand Up @@ -2142,8 +2146,9 @@ int sta_cfon_set_wireless(struct sigma_dut *dut, struct sigma_conn *conn,
}


static int cmd_ap_set_radius(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_set_radius(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
/* const char *name = get_param(cmd, "NAME"); */
const char *val;
Expand Down Expand Up @@ -3909,8 +3914,9 @@ static void cmd_owrt_ap_hs2_reset(struct sigma_dut *dut)
}


static int cmd_ap_reboot(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_reboot(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
switch (get_driver_type()) {
case DRIVER_ATHEROS:
Expand Down Expand Up @@ -6516,8 +6522,9 @@ static int ap_set_force_mcs(struct sigma_dut *dut, int force, int mcs)
}


int cmd_ap_config_commit(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
enum sigma_cmd_result cmd_ap_config_commit(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
/* const char *name = get_param(cmd, "NAME"); */
FILE *f;
Expand Down Expand Up @@ -7635,8 +7642,9 @@ static int parse_qos_params(struct sigma_dut *dut, struct sigma_conn *conn,
}


static int cmd_ap_set_apqos(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_set_apqos(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
/* TXOP: The values provided here for VHT5G only */
if (!parse_qos_params(dut, conn, &dut->ap_qos[AP_AC_VO],
Expand Down Expand Up @@ -7669,8 +7677,9 @@ static int cmd_ap_set_apqos(struct sigma_dut *dut, struct sigma_conn *conn,
}


static int cmd_ap_set_staqos(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_set_staqos(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
if (!parse_qos_params(dut, conn, &dut->ap_sta_qos[AP_AC_VO],
get_param(cmd, "cwmin_VO"),
Expand Down Expand Up @@ -7784,8 +7793,9 @@ static void ath_reset_vht_defaults(struct sigma_dut *dut)
}


static int cmd_ap_reset_default(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_reset_default(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
const char *type, *program;
enum driver_type drv;
Expand Down Expand Up @@ -8199,8 +8209,9 @@ int sta_cfon_reset_default(struct sigma_dut *dut, struct sigma_conn *conn,
}


static int cmd_ap_get_info(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_get_info(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
/* const char *name = get_param(cmd, "NAME"); */
struct stat s;
Expand Down Expand Up @@ -8322,8 +8333,9 @@ static int cmd_ap_get_info(struct sigma_dut *dut, struct sigma_conn *conn,
}


static int cmd_ap_deauth_sta(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_deauth_sta(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
/* const char *name = get_param(cmd, "NAME"); */
/* const char *ifname = get_param(cmd, "INTERFACE"); */
Expand Down Expand Up @@ -9110,8 +9122,9 @@ static int ap_send_frame_60g(struct sigma_dut *dut,
}


int cmd_ap_send_frame(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
enum sigma_cmd_result cmd_ap_send_frame(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
/* const char *name = get_param(cmd, "NAME"); */
/* const char *ifname = get_param(cmd, "INTERFACE"); */
Expand Down Expand Up @@ -9202,9 +9215,9 @@ int cmd_ap_send_frame(struct sigma_dut *dut, struct sigma_conn *conn,
}


static int cmd_ap_get_mac_address(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_get_mac_address(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
#if defined( __linux__)
/* const char *name = get_param(cmd, "NAME"); */
Expand Down Expand Up @@ -9285,8 +9298,9 @@ int sta_cfon_get_mac_address(struct sigma_dut *dut, struct sigma_conn *conn,
}


static int cmd_ap_set_pmf(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_set_pmf(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
/*
* Ignore the command since the parameters are already handled through
Expand All @@ -9297,8 +9311,9 @@ static int cmd_ap_set_pmf(struct sigma_dut *dut, struct sigma_conn *conn,
}


static int cmd_ap_set_hs2(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_set_hs2(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
/* const char *name = get_param(cmd, "NAME"); */
/* const char *ifname = get_param(cmd, "INTERFACE"); */
Expand Down Expand Up @@ -9896,8 +9911,9 @@ static int ap_nfc_wps_connection_handover(struct sigma_dut *dut,
}


static int cmd_ap_nfc_action(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_nfc_action(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
/* const char *name = get_param(cmd, "Name"); */
/* const char *intf = get_param(cmd, "Interface"); */
Expand All @@ -9920,8 +9936,9 @@ static int cmd_ap_nfc_action(struct sigma_dut *dut, struct sigma_conn *conn,
}


static int cmd_ap_wps_read_pin(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_wps_read_pin(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
char *pin = "12345670"; /* TODO: use random PIN */
char resp[100];
Expand All @@ -9933,8 +9950,9 @@ static int cmd_ap_wps_read_pin(struct sigma_dut *dut, struct sigma_conn *conn,
}


static int cmd_ap_wps_enter_pin(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_wps_enter_pin(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
const char *pin = get_param(cmd, "PIN");
char wps_pin[11];
Expand All @@ -9955,8 +9973,9 @@ static int cmd_ap_wps_enter_pin(struct sigma_dut *dut, struct sigma_conn *conn,
}


static int cmd_ap_wps_set_pbc(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_wps_set_pbc(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
sigma_dut_print(dut, DUT_MSG_DEBUG,
"Selecting the push button configuration method");
Expand Down Expand Up @@ -10004,8 +10023,9 @@ int ap_wps_registration(struct sigma_dut *dut, struct sigma_conn *conn,
}


static int cmd_ap_get_parameter(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_get_parameter(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
char value[256], resp[512];
const char *param = get_param(cmd, "parameter");
Expand Down Expand Up @@ -10558,8 +10578,9 @@ static int wil6210_ap_set_rfeature(struct sigma_dut *dut,
#endif /* __linux__ */


static int cmd_ap_set_rfeature(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_ap_set_rfeature(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
/* const char *name = get_param(cmd, "NAME"); */
/* const char *type = get_param(cmd, "Type"); */
Expand Down Expand Up @@ -10593,17 +10614,18 @@ static int cmd_ap_set_rfeature(struct sigma_dut *dut, struct sigma_conn *conn,
}


static int cmd_accesspoint(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_accesspoint(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
/* const char *name = get_param(cmd, "NAME"); */
return 1;
}


static int cmd_ap_preset_testparameters(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result
cmd_ap_preset_testparameters(struct sigma_dut *dut, struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
const char *val;

Expand Down
24 changes: 12 additions & 12 deletions miracast.c
Original file line number Diff line number Diff line change
Expand Up @@ -970,9 +970,9 @@ int miracast_mdns_start_wfd_connection(struct sigma_dut *dut,
}


static int cmd_start_wfd_connection(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_start_wfd_connection(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
const char *intf = get_param(cmd, "Interface");
const char *peer_address = get_param(cmd, "PeerAddress");
Expand Down Expand Up @@ -1249,9 +1249,9 @@ static int cmd_start_wfd_connection(struct sigma_dut *dut,
}


static int cmd_connect_go_start_wfd(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_connect_go_start_wfd(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
const char *intf = get_param(cmd, "Interface");
const char *p2p_dev_id = get_param(cmd, "P2PdevID");
Expand Down Expand Up @@ -1398,9 +1398,9 @@ static int cmd_connect_go_start_wfd(struct sigma_dut *dut,
}


static int cmd_sta_generate_event(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_sta_generate_event(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{

/* const char *intf = get_param(cmd, "Interface"); */
Expand Down Expand Up @@ -1449,9 +1449,9 @@ static int cmd_sta_generate_event(struct sigma_dut *dut,
}


static int cmd_reinvoke_wfd_session(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
static enum sigma_cmd_result cmd_reinvoke_wfd_session(struct sigma_dut *dut,
struct sigma_conn *conn,
struct sigma_cmd *cmd)
{
const char *intf = get_param(cmd, "Interface");
const char *grp_id = get_param(cmd, "GroupID");
Expand Down
Loading

0 comments on commit f722271

Please sign in to comment.