diff options
| author | dimitri staessens <dimitri.staessens@ugent.be> | 2017-02-22 23:53:04 +0100 | 
|---|---|---|
| committer | dimitri staessens <dimitri.staessens@ugent.be> | 2017-02-22 23:53:04 +0100 | 
| commit | 406cf2d7a347222ef0526d1db0d3cb191c287656 (patch) | |
| tree | fbaff96332e36ffd67c9eb06a8a8579adb6ef979 /src | |
| parent | b3913bd7d7c1fb4cc82de750990d2111df2d9b2d (diff) | |
| download | ouroboros-406cf2d7a347222ef0526d1db0d3cb191c287656.tar.gz ouroboros-406cf2d7a347222ef0526d1db0d3cb191c287656.zip | |
irmd: Check IPCP type before bootstrap
This prevents assertion failures in the IPCP in some cases. IPCPs can
now safely assert the type.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ipcpd/normal/main.c | 6 | ||||
| -rw-r--r-- | src/irmd/main.c | 7 | 
2 files changed, 9 insertions, 4 deletions
| diff --git a/src/ipcpd/normal/main.c b/src/ipcpd/normal/main.c index e3955ff2..c41b6187 100644 --- a/src/ipcpd/normal/main.c +++ b/src/ipcpd/normal/main.c @@ -344,10 +344,8 @@ static int normal_ipcp_bootstrap(struct dif_config * conf)          (void) pol; -        if (conf == NULL || conf->type != THIS_TYPE) { -                log_err("Bad DIF configuration."); -                return -EINVAL; -        } +        assert(conf); +        assert(conf->type == THIS_TYPE);          pthread_rwlock_wrlock(&ipcpi.state_lock); diff --git a/src/irmd/main.c b/src/irmd/main.c index 7f20faf4..d49193d3 100644 --- a/src/irmd/main.c +++ b/src/irmd/main.c @@ -397,6 +397,13 @@ static int bootstrap_ipcp(pid_t              api,                  return -1;          } +        if (entry->type != (enum ipcp_type) conf->ipcp_type) { +                pthread_rwlock_unlock(&irmd->reg_lock); +                pthread_rwlock_unlock(&irmd->state_lock); +                log_err("Configuration does not match IPCP type."); +                return -1; +        } +          if (ipcp_bootstrap(entry->api, conf)) {                  pthread_rwlock_unlock(&irmd->reg_lock);                  pthread_rwlock_unlock(&irmd->state_lock); | 
