A problem was found with this patch. The direct inspection of bundle 
buffer tailroom did not account for the possiblity of unrequested tailroom 
added by skb_alloc(), thereby allowing a bundle to be created that exceeds 
the current link MTU.

I'll resend this patch set with this issue resolved.

/Per

On Wed, 28 Jun 2006, Per Liden wrote:

> From: Allan Stephens <[EMAIL PROTECTED]>
> 
> Now determines tailroom of bundle buffer by directly inspection of buffer.
> Previously, buffer was assumed to have a max capacity equal to the link MTU,
> but the addition of link MTU negotiation means that the link MTU can increase
> after the bundle buffer is allocated.
> 
> Signed-off-by: Allan Stephens <[EMAIL PROTECTED]>
> Signed-off-by: Per Liden <[EMAIL PROTECTED]>
> ---
>  net/tipc/link.c |   11 ++++++-----
>  1 files changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/net/tipc/link.c b/net/tipc/link.c
> index d646580..c6831c7 100644
> --- a/net/tipc/link.c
> +++ b/net/tipc/link.c
> @@ -2,7 +2,7 @@
>   * net/tipc/link.c: TIPC link code
>   * 
>   * Copyright (c) 1996-2006, Ericsson AB
> - * Copyright (c) 2004-2005, Wind River Systems
> + * Copyright (c) 2004-2006, Wind River Systems
>   * All rights reserved.
>   *
>   * Redistribution and use in source and binary forms, with or without
> @@ -988,17 +988,18 @@ static int link_bundle_buf(struct link *
>       struct tipc_msg *bundler_msg = buf_msg(bundler);
>       struct tipc_msg *msg = buf_msg(buf);
>       u32 size = msg_size(msg);
> -     u32 to_pos = align(msg_size(bundler_msg));
> -     u32 rest = link_max_pkt(l_ptr) - to_pos;
> +     u32 bundle_size = msg_size(bundler_msg);
> +     u32 to_pos = align(bundle_size);
> +     u32 pad = to_pos - bundle_size;
>  
>       if (msg_user(bundler_msg) != MSG_BUNDLER)
>               return 0;
>       if (msg_type(bundler_msg) != OPEN_MSG)
>               return 0;
> -     if (rest < align(size))
> +     if (skb_tailroom(bundler) < (pad + size))
>               return 0;
>  
> -     skb_put(bundler, (to_pos - msg_size(bundler_msg)) + size);
> +     skb_put(bundler, pad + size);
>       memcpy(bundler->data + to_pos, buf->data, size);
>       msg_set_size(bundler_msg, to_pos + size);
>       msg_set_msgcnt(bundler_msg, msg_msgcnt(bundler_msg) + 1);
> -- 
> 1.4.0
> 
> -
> 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
> 
-
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