On Fri, 14 Jul 2006, [EMAIL PROTECTED] wrote:

> +struct sk_buff *cipso_v4_doi_dump_all(const size_t headroom)
> +{
> +     struct sk_buff *skb;
> +     unsigned char *buf;
> +     struct cipso_v4_doi *iter;
> +     u32 doi_cnt = 0;
> +     ssize_t buf_len;
> +
> +     /* XXX - In both cases, this is kinda ugly as we have to go through
> +        the list once to determine how large of a buffer we need,
> +        drop the locks, allocate the buffer, grab the locks, and
> +        finally fill the buffer.  The problem is that there is that
> +        open window where the table could grow and we will end up
> +        short on space. */

This needs to be fixed.

Currently, it seems that you just bail if this happens.

> +
> +     buf_len = NETLBL_LEN_U32;
> +     rcu_read_lock();
> +     list_for_each_entry_rcu(iter, &cipso_v4_doi_list, list)
> +             if (iter->valid) {
> +                     doi_cnt += 1;
> +                     buf_len += 2 * NETLBL_LEN_U32;
> +             }
> +     rcu_read_unlock();
> +
> +     skb = netlbl_netlink_alloc_skb(headroom, buf_len, GFP_KERNEL);
> +     if (skb == NULL)
> +             return NULL;
> +     buf = skb_put(skb, buf_len);
> +     netlbl_putinc_u32(&buf, doi_cnt, &buf_len);
> +
> +     rcu_read_lock();
> +     list_for_each_entry_rcu(iter, &cipso_v4_doi_list, list)
> +             if (iter->valid) {
> +                     if (buf_len < 2 * NETLBL_LEN_U32) {
> +                             rcu_read_unlock();
> +                             kfree(skb);
> +                             return NULL;
> +                     }
> +                     netlbl_putinc_u32(&buf, iter->doi, &buf_len);
> +                     netlbl_putinc_u32(&buf, iter->type, &buf_len);
> +             }
> +     rcu_read_unlock();
> +
> +     return skb;
> +}
> +

-- 
James Morris
<[EMAIL PROTECTED]>
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to