|
@@ -88,13 +88,11 @@ void *__nf_ct_ext_add(struct nf_conn *ct, enum nf_ct_ext_id id, gfp_t gfp)
|
|
|
newlen = newoff + t->len;
|
|
|
rcu_read_unlock();
|
|
|
|
|
|
- if (newlen >= ksize(ct->ext)) {
|
|
|
- new = kmalloc(newlen, gfp);
|
|
|
- if (!new)
|
|
|
- return NULL;
|
|
|
-
|
|
|
- memcpy(new, ct->ext, ct->ext->len);
|
|
|
+ new = krealloc(ct->ext, newlen, gfp);
|
|
|
+ if (!new)
|
|
|
+ return NULL;
|
|
|
|
|
|
+ if (new != ct->ext) {
|
|
|
for (i = 0; i < NF_CT_EXT_NUM; i++) {
|
|
|
if (!nf_ct_ext_exist(ct, i))
|
|
|
continue;
|