diff options
Diffstat (limited to 'net/tipc/msg.c')
| -rw-r--r-- | net/tipc/msg.c | 25 |
1 files changed, 3 insertions, 22 deletions
diff --git a/net/tipc/msg.c b/net/tipc/msg.c index 6d92d17e7fb5..03e57bf92c73 100644 --- a/net/tipc/msg.c +++ b/net/tipc/msg.c | |||
| @@ -68,20 +68,6 @@ void tipc_msg_init(struct tipc_msg *m, u32 user, u32 type, | |||
| 68 | } | 68 | } |
| 69 | 69 | ||
| 70 | /** | 70 | /** |
| 71 | * tipc_msg_calc_data_size - determine total data size for message | ||
| 72 | */ | ||
| 73 | |||
| 74 | int tipc_msg_calc_data_size(struct iovec const *msg_sect, u32 num_sect) | ||
| 75 | { | ||
| 76 | int dsz = 0; | ||
| 77 | int i; | ||
| 78 | |||
| 79 | for (i = 0; i < num_sect; i++) | ||
| 80 | dsz += msg_sect[i].iov_len; | ||
| 81 | return dsz; | ||
| 82 | } | ||
| 83 | |||
| 84 | /** | ||
| 85 | * tipc_msg_build - create message using specified header and data | 71 | * tipc_msg_build - create message using specified header and data |
| 86 | * | 72 | * |
| 87 | * Note: Caller must not hold any locks in case copy_from_user() is interrupted! | 73 | * Note: Caller must not hold any locks in case copy_from_user() is interrupted! |
| @@ -89,18 +75,13 @@ int tipc_msg_calc_data_size(struct iovec const *msg_sect, u32 num_sect) | |||
| 89 | * Returns message data size or errno | 75 | * Returns message data size or errno |
| 90 | */ | 76 | */ |
| 91 | 77 | ||
| 92 | int tipc_msg_build(struct tipc_msg *hdr, | 78 | int tipc_msg_build(struct tipc_msg *hdr, struct iovec const *msg_sect, |
| 93 | struct iovec const *msg_sect, u32 num_sect, | 79 | u32 num_sect, unsigned int total_len, |
| 94 | int max_size, int usrmem, struct sk_buff **buf) | 80 | int max_size, int usrmem, struct sk_buff **buf) |
| 95 | { | 81 | { |
| 96 | int dsz, sz, hsz, pos, res, cnt; | 82 | int dsz, sz, hsz, pos, res, cnt; |
| 97 | 83 | ||
| 98 | dsz = tipc_msg_calc_data_size(msg_sect, num_sect); | 84 | dsz = total_len; |
| 99 | if (unlikely(dsz > TIPC_MAX_USER_MSG_SIZE)) { | ||
| 100 | *buf = NULL; | ||
| 101 | return -EINVAL; | ||
| 102 | } | ||
| 103 | |||
| 104 | pos = hsz = msg_hdr_sz(hdr); | 85 | pos = hsz = msg_hdr_sz(hdr); |
| 105 | sz = hsz + dsz; | 86 | sz = hsz + dsz; |
| 106 | msg_set_size(hdr, sz); | 87 | msg_set_size(hdr, sz); |
