struct fils_discovery_data *new, *old = NULL;
        struct ieee80211_fils_discovery *fd;
 
-       if (!params->tmpl || !params->tmpl_len)
-               return -EINVAL;
+       if (!params->update)
+               return 0;
 
        fd = &link_conf->fils_discovery;
        fd->min_interval = params->min_interval;
        fd->max_interval = params->max_interval;
 
        old = sdata_dereference(link->u.ap.fils_discovery, sdata);
-       new = kzalloc(sizeof(*new) + params->tmpl_len, GFP_KERNEL);
-       if (!new)
-               return -ENOMEM;
-       new->len = params->tmpl_len;
-       memcpy(new->data, params->tmpl, params->tmpl_len);
-       rcu_assign_pointer(link->u.ap.fils_discovery, new);
-
        if (old)
                kfree_rcu(old, rcu_head);
 
-       return 0;
+       if (params->tmpl && params->tmpl_len) {
+               new = kzalloc(sizeof(*new) + params->tmpl_len, GFP_KERNEL);
+               if (!new)
+                       return -ENOMEM;
+               new->len = params->tmpl_len;
+               memcpy(new->data, params->tmpl, params->tmpl_len);
+               rcu_assign_pointer(link->u.ap.fils_discovery, new);
+       } else {
+               RCU_INIT_POINTER(link->u.ap.fils_discovery, NULL);
+       }
+
+       return BSS_CHANGED_FILS_DISCOVERY;
 }
 
 static int
 {
        struct unsol_bcast_probe_resp_data *new, *old = NULL;
 
-       if (!params->tmpl || !params->tmpl_len)
-               return -EINVAL;
+       if (!params->update)
+               return 0;
 
-       old = sdata_dereference(link->u.ap.unsol_bcast_probe_resp, sdata);
-       new = kzalloc(sizeof(*new) + params->tmpl_len, GFP_KERNEL);
-       if (!new)
-               return -ENOMEM;
-       new->len = params->tmpl_len;
-       memcpy(new->data, params->tmpl, params->tmpl_len);
-       rcu_assign_pointer(link->u.ap.unsol_bcast_probe_resp, new);
+       link_conf->unsol_bcast_probe_resp_interval = params->interval;
 
+       old = sdata_dereference(link->u.ap.unsol_bcast_probe_resp, sdata);
        if (old)
                kfree_rcu(old, rcu_head);
 
-       link_conf->unsol_bcast_probe_resp_interval = params->interval;
+       if (params->tmpl && params->tmpl_len) {
+               new = kzalloc(sizeof(*new) + params->tmpl_len, GFP_KERNEL);
+               if (!new)
+                       return -ENOMEM;
+               new->len = params->tmpl_len;
+               memcpy(new->data, params->tmpl, params->tmpl_len);
+               rcu_assign_pointer(link->u.ap.unsol_bcast_probe_resp, new);
+       } else {
+               RCU_INIT_POINTER(link->u.ap.unsol_bcast_probe_resp, NULL);
+       }
 
-       return 0;
+       return BSS_CHANGED_UNSOL_BCAST_PROBE_RESP;
 }
 
 static int ieee80211_set_ftm_responder_params(
        if (err < 0)
                goto error;
 
-       if (params->fils_discovery.max_interval) {
-               err = ieee80211_set_fils_discovery(sdata,
-                                                  ¶ms->fils_discovery,
-                                                  link, link_conf);
-               if (err < 0)
-                       goto error;
-               changed |= BSS_CHANGED_FILS_DISCOVERY;
-       }
+       err = ieee80211_set_fils_discovery(sdata, ¶ms->fils_discovery,
+                                          link, link_conf);
+       if (err < 0)
+               goto error;
+       changed |= err;
 
-       if (params->unsol_bcast_probe_resp.interval) {
-               err = ieee80211_set_unsol_bcast_probe_resp(sdata,
-                                                          ¶ms->unsol_bcast_probe_resp,
-                                                          link, link_conf);
-               if (err < 0)
-                       goto error;
-               changed |= BSS_CHANGED_UNSOL_BCAST_PROBE_RESP;
-       }
+       err = ieee80211_set_unsol_bcast_probe_resp(sdata,
+                                                  ¶ms->unsol_bcast_probe_resp,
+                                                  link, link_conf);
+       if (err < 0)
+               goto error;
+       changed |= err;
 
        err = drv_start_ap(sdata->local, sdata, link_conf);
        if (err) {