Skip to content

Commit

Permalink
Avoid creating a struct with elements after ethtool_sset_info's varia…
Browse files Browse the repository at this point in the history
…ble-length-array.

Resolves #3369
  • Loading branch information
rocallahan committed Aug 25, 2022
1 parent 336edc3 commit 2979c60
Showing 1 changed file with 13 additions and 14 deletions.
27 changes: 13 additions & 14 deletions src/record_syscall.cc
Expand Up @@ -1450,17 +1450,17 @@ template <typename Arch> void get_ethtool_gstrings_arch(RecordTask* t) {
AutoRemoteSyscalls remote(t);

// Do a ETHTOOL_GSSET_INFO to get the number of strings
struct SingleStringSet {
ethtool_sset_info et;
uint32_t data;
};
SingleStringSet sss;
sss.et.cmd = ETHTOOL_GSSET_INFO;
sss.et.reserved = 0;
sss.et.sset_mask = 1 << et_gstrings.string_set;
AutoRestoreMem sss_mem(remote, &sss, sizeof(sss));

ifreq.ifr_ifru.ifru_data = sss_mem.get();
ethtool_sset_info et;
et.cmd = ETHTOOL_GSSET_INFO;
et.reserved = 0;
et.sset_mask = 1 << et_gstrings.string_set;
std::vector<uint8_t> buffer;
buffer.resize(sizeof(et) + sizeof(uint32_t));
memcpy(buffer.data(), &et, sizeof(et));
memset(buffer.data() + sizeof(et), 0, sizeof(uint32_t));
AutoRestoreMem et_mem(remote, buffer.data(), buffer.size());

ifreq.ifr_ifru.ifru_data = et_mem.get();
AutoRestoreMem ifr_mem(remote, &ifreq, sizeof(ifreq));

long ret = remote.syscall(regs.original_syscallno(), regs.arg1(),
Expand All @@ -1470,16 +1470,15 @@ template <typename Arch> void get_ethtool_gstrings_arch(RecordTask* t) {
return;
}

sss = t->read_mem(sss_mem.get().cast<SingleStringSet>());

uint32_t data = t->read_mem((et_mem.get() + sizeof(et)).cast<uint32_t>());
// Now do the ETHTOOL_GSTRINGS call
ret = remote.syscall(regs.original_syscallno(), regs.arg1(), SIOCETHTOOL,
regs.arg3());
remote.regs().set_syscall_result(ret);
if (ret < 0) {
return;
}
t->record_remote(orig_gstrings, sizeof(ethtool_gstrings) + ETH_GSTRING_LEN*sss.data);
t->record_remote(orig_gstrings, sizeof(ethtool_gstrings) + ETH_GSTRING_LEN*data);
}

static void get_ethtool_gstrings(RecordTask* t) {
Expand Down

0 comments on commit 2979c60

Please sign in to comment.