]> Pileus Git - ~andy/linux/blobdiff - net/sctp/sm_make_chunk.c
Merge tag 'pm+acpi-3.14-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
[~andy/linux] / net / sctp / sm_make_chunk.c
index fe690320b1e430a7915e35d36d26a72847368438..3a1767ef3201a6a1870f641ef29e3683ea6dcff7 100644 (file)
@@ -23,9 +23,8 @@
  * See the GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with GNU CC; see the file COPYING.  If not, write to
- * the Free Software Foundation, 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * along with GNU CC; see the file COPYING.  If not, see
+ * <http://www.gnu.org/licenses/>.
  *
  * Please send any bug reports or fixes you make to the
  * email address(es):
@@ -79,6 +78,8 @@ static int sctp_process_param(struct sctp_association *asoc,
                              gfp_t gfp);
 static void *sctp_addto_param(struct sctp_chunk *chunk, int len,
                              const void *data);
+static void  *sctp_addto_chunk_fixed(struct sctp_chunk *, int len,
+                                    const void *data);
 
 /* Control chunk destructor */
 static void sctp_control_release_owner(struct sk_buff *skb)
@@ -1420,8 +1421,8 @@ static void sctp_chunk_destroy(struct sctp_chunk *chunk)
        BUG_ON(!list_empty(&chunk->list));
        list_del_init(&chunk->transmitted_list);
 
-       /* Free the chunk skb data and the SCTP_chunk stub itself. */
-       dev_kfree_skb(chunk->skb);
+       consume_skb(chunk->skb);
+       consume_skb(chunk->auth_chunk);
 
        SCTP_DBG_OBJCNT_DEC(chunk);
        kmem_cache_free(sctp_chunk_cachep, chunk);
@@ -1476,8 +1477,8 @@ void *sctp_addto_chunk(struct sctp_chunk *chunk, int len, const void *data)
 /* Append bytes to the end of a chunk. Returns NULL if there isn't sufficient
  * space in the chunk
  */
-void *sctp_addto_chunk_fixed(struct sctp_chunk *chunk,
-                            int len, const void *data)
+static void *sctp_addto_chunk_fixed(struct sctp_chunk *chunk,
+                                   int len, const void *data)
 {
        if (skb_tailroom(chunk->skb) >= len)
                return sctp_addto_chunk(chunk, len, data);
@@ -1968,13 +1969,13 @@ static int sctp_verify_ext_param(struct net *net, union sctp_params param)
 
        for (i = 0; i < num_ext; i++) {
                switch (param.ext->chunks[i]) {
-                   case SCTP_CID_AUTH:
-                           have_auth = 1;
-                           break;
-                   case SCTP_CID_ASCONF:
-                   case SCTP_CID_ASCONF_ACK:
-                           have_asconf = 1;
-                           break;
+               case SCTP_CID_AUTH:
+                       have_auth = 1;
+                       break;
+               case SCTP_CID_ASCONF:
+               case SCTP_CID_ASCONF_ACK:
+                       have_asconf = 1;
+                       break;
                }
        }
 
@@ -2001,25 +2002,24 @@ static void sctp_process_ext_param(struct sctp_association *asoc,
 
        for (i = 0; i < num_ext; i++) {
                switch (param.ext->chunks[i]) {
-                   case SCTP_CID_FWD_TSN:
-                           if (net->sctp.prsctp_enable &&
-                               !asoc->peer.prsctp_capable)
+               case SCTP_CID_FWD_TSN:
+                       if (net->sctp.prsctp_enable && !asoc->peer.prsctp_capable)
                                    asoc->peer.prsctp_capable = 1;
-                           break;
-                   case SCTP_CID_AUTH:
-                           /* if the peer reports AUTH, assume that he
-                            * supports AUTH.
-                            */
-                           if (net->sctp.auth_enable)
-                                   asoc->peer.auth_capable = 1;
-                           break;
-                   case SCTP_CID_ASCONF:
-                   case SCTP_CID_ASCONF_ACK:
-                           if (net->sctp.addip_enable)
-                                   asoc->peer.asconf_capable = 1;
-                           break;
-                   default:
-                           break;
+                       break;
+               case SCTP_CID_AUTH:
+                       /* if the peer reports AUTH, assume that he
+                        * supports AUTH.
+                        */
+                       if (net->sctp.auth_enable)
+                               asoc->peer.auth_capable = 1;
+                       break;
+               case SCTP_CID_ASCONF:
+               case SCTP_CID_ASCONF_ACK:
+                       if (net->sctp.addip_enable)
+                               asoc->peer.asconf_capable = 1;
+                       break;
+               default:
+                       break;
                }
        }
 }
@@ -2252,7 +2252,7 @@ int sctp_verify_init(struct net *net, const struct sctp_association *asoc,
         * VIOLATION error.  We build the ERROR chunk here and let the normal
         * error handling code build and send the packet.
         */
-       if (param.v != (void*)chunk->chunk_end)
+       if (param.v != (void *)chunk->chunk_end)
                return sctp_process_inv_paramlength(asoc, param.p, chunk, errp);
 
        /* The only missing mandatory param possible today is
@@ -2267,14 +2267,14 @@ int sctp_verify_init(struct net *net, const struct sctp_association *asoc,
 
                result = sctp_verify_param(net, asoc, param, cid, chunk, errp);
                switch (result) {
-                   case SCTP_IERROR_ABORT:
-                   case SCTP_IERROR_NOMEM:
-                               return 0;
-                   case SCTP_IERROR_ERROR:
-                               return 1;
-                   case SCTP_IERROR_NO_ERROR:
-                   default:
-                               break;
+               case SCTP_IERROR_ABORT:
+               case SCTP_IERROR_NOMEM:
+                       return 0;
+               case SCTP_IERROR_ERROR:
+                       return 1;
+               case SCTP_IERROR_NO_ERROR:
+               default:
+                       break;
                }
 
        } /* for (loop through all parameters) */
@@ -2309,7 +2309,7 @@ int sctp_process_init(struct sctp_association *asoc, struct sctp_chunk *chunk,
         * added as the primary transport.  The source address seems to
         * be a a better choice than any of the embedded addresses.
         */
-       if(!sctp_assoc_add_peer(asoc, peer_addr, gfp, SCTP_ACTIVE))
+       if (!sctp_assoc_add_peer(asoc, peer_addr, gfp, SCTP_ACTIVE))
                goto nomem;
 
        if (sctp_cmp_addr_exact(sctp_source(chunk), peer_addr))
@@ -3335,7 +3335,7 @@ static __be16 sctp_get_asconf_response(struct sctp_chunk *asconf_ack,
 
        while (asconf_ack_len > 0) {
                if (asconf_ack_param->crr_id == asconf_param->crr_id) {
-                       switch(asconf_ack_param->param_hdr.type) {
+                       switch (asconf_ack_param->param_hdr.type) {
                        case SCTP_PARAM_SUCCESS_REPORT:
                                return SCTP_ERROR_NO_ERROR;
                        case SCTP_PARAM_ERR_CAUSE: