Hi Xin,

[auto build test WARNING on net-next/master]

url:    
https://github.com/0day-ci/linux/commits/Xin-Long/sctp-implement-rfc6525-sctp-stream-reconf/20170101-192844
config: x86_64-randconfig-x015-201701 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   net/sctp/stream.c: In function 'sctp_process_strreset_outreq':
   net/sctp/stream.c:140:9: warning: 'str_p' may be used uninitialized in this 
function [-Wmaybe-uninitialized]
     *evp = sctp_ulpevent_make_stream_reset_event(asoc,
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      flags | SCTP_STREAM_RESET_OUTGOING_SSN, nums, str_p,
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      GFP_ATOMIC);
      ~~~~~~~~~~~
   net/sctp/stream.c: In function 'sctp_process_strreset_tsnreq':
>> net/sctp/stream.c:283:9: warning: 'initial_tsn' may be used uninitialized in 
>> this function [-Wmaybe-uninitialized]
     return sctp_make_strreset_tsnresp(asoc, result, request_seq,
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           asoc->next_tsn, initial_tsn);
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

vim +/initial_tsn +283 net/sctp/stream.c

   134                  for (i = 0; i < asoc->streamincnt; i++)
   135                          asoc->streamin[i].ssn = 0;
   136          }
   137  
   138          result = SCTP_STRRESET_PERFORMED;
   139  
 > 140          *evp = sctp_ulpevent_make_stream_reset_event(asoc,
   141                  flags | SCTP_STREAM_RESET_OUTGOING_SSN, nums, str_p,
   142                  GFP_ATOMIC);
   143  
   144  out:
   145          return sctp_make_strreset_resp(asoc, result, request_seq);
   146  }
   147  
   148  struct sctp_chunk *sctp_process_strreset_inreq(
   149                                  struct sctp_association *asoc,
   150                                  union sctp_params param,
   151                                  struct sctp_ulpevent **evp)
   152  {
   153          struct sctp_strreset_inreq *inreq = param.v;
   154          __u32 result = SCTP_STRRESET_DENIED;
   155          struct sctp_chunk *chunk = NULL;
   156          __u16 i, nums, *str_p;
   157          __u32 request_seq;
   158  
   159          request_seq = ntohl(inreq->request_seq);
   160          if (request_seq > asoc->strreset_inseq) {
   161                  result = SCTP_STRRESET_ERR_BAD_SEQNO;
   162                  goto out;
   163          } else if (request_seq == asoc->strreset_inseq) {
   164                  asoc->strreset_inseq++;
   165          }
   166  
   167          if (!(asoc->strreset_enable & SCTP_ENABLE_RESET_STREAM_REQ))
   168                  goto out;
   169  
   170          if (asoc->strreset_outstanding) {
   171                  result = SCTP_STRRESET_ERR_IN_PROGRESS;
   172                  goto out;
   173          }
   174  
   175          nums = (ntohs(param.p->length) - sizeof(*inreq)) / 2;
   176          str_p = inreq->list_of_streams;
   177          for (i = 0; i < nums; i++) {
   178                  str_p[i] = ntohs(str_p[i]);
   179                  if (str_p[i] >= asoc->streamoutcnt) {
   180                          result = SCTP_STRRESET_ERR_WRONG_SSN;
   181                          goto out;
   182                  }
   183          }
   184  
   185          chunk = sctp_make_strreset_req(asoc, nums, str_p, 1, 0);
   186          if (!chunk)
   187                  goto out;
   188  
   189          if (nums)
   190                  for (i = 0; i < nums; i++)
   191                          asoc->streamout[str_p[i]].state =
   192                                                     SCTP_STREAM_CLOSED;
   193          else
   194                  for (i = 0; i < asoc->streamoutcnt; i++)
   195                          asoc->streamout[i].state = SCTP_STREAM_CLOSED;
   196  
   197          asoc->strreset_chunk = chunk;
   198          asoc->strreset_outstanding = 1;
   199          sctp_chunk_hold(asoc->strreset_chunk);
   200  
   201          *evp = sctp_ulpevent_make_stream_reset_event(asoc,
   202                  SCTP_STREAM_RESET_INCOMING_SSN, nums, str_p, 
GFP_ATOMIC);
   203  
   204  out:
   205          if (!chunk)
   206                  chunk =  sctp_make_strreset_resp(asoc, result, 
request_seq);
   207  
   208          return chunk;
   209  }
   210  
   211  struct sctp_chunk *sctp_process_strreset_tsnreq(
   212                                  struct sctp_association *asoc,
   213                                  union sctp_params param,
   214                                  struct sctp_ulpevent **evp)
   215  {
   216          struct sctp_strreset_tsnreq *tsnreq = param.v;
   217          __u32 request_seq, initial_tsn, max_tsn_seen;
   218          __u32 result = SCTP_STRRESET_DENIED;
   219          __u16 i;
   220  
   221          request_seq = ntohl(tsnreq->request_seq);
   222          if (request_seq > asoc->strreset_inseq) {
   223                  result = SCTP_STRRESET_ERR_BAD_SEQNO;
   224                  goto out;
   225          } else if (request_seq == asoc->strreset_inseq) {
   226                  asoc->strreset_inseq++;
   227          }
   228  
   229          if (!(asoc->strreset_enable & SCTP_ENABLE_RESET_ASSOC_REQ))
   230                  goto out;
   231  
   232          if (asoc->strreset_outstanding) {
   233                  result = SCTP_STRRESET_ERR_IN_PROGRESS;
   234                  goto out;
   235          }
   236  
   237          /* G3: The same processing as though a SACK chunk with no gap 
report
   238           *     and a cumulative TSN ACK of the Sender's Next TSN minus 
1 were
   239           *     received MUST be performed.
   240           */
   241          max_tsn_seen = 
sctp_tsnmap_get_max_tsn_seen(&asoc->peer.tsn_map);
   242          sctp_ulpq_reasm_flushtsn(&asoc->ulpq, max_tsn_seen);
   243          sctp_ulpq_abort_pd(&asoc->ulpq, GFP_ATOMIC);
   244  
   245          /* G1: Compute an appropriate value for the Receiver's Next TSN 
-- the
   246           *     TSN that the peer should use to send the next DATA 
chunk.  The
   247           *     value SHOULD be the smallest TSN not acknowledged by the
   248           *     receiver of the request plus 2^31.
   249           */
   250          initial_tsn = sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map) + (1 << 
31);
   251          sctp_tsnmap_init(&asoc->peer.tsn_map, SCTP_TSN_MAP_INITIAL,
   252                           initial_tsn, GFP_ATOMIC);
   253  
   254          /* G4: The same processing as though a FWD-TSN chunk (as 
defined in
   255           *     [RFC3758]) with all streams affected and a new 
cumulative TSN
   256           *     ACK of the Receiver's Next TSN minus 1 were received 
MUST be
   257           *     performed.
   258           */
   259          sctp_outq_free(&asoc->outqueue);
   260  
   261          /* G2: Compute an appropriate value for the local endpoint's 
next TSN,
   262           *     i.e., the next TSN assigned by the receiver of the 
SSN/TSN reset
   263           *     chunk.  The value SHOULD be the highest TSN sent by the 
receiver
   264           *     of the request plus 1.
   265           */
   266          asoc->ctsn_ack_point = asoc->next_tsn - 1;
   267          asoc->adv_peer_ack_point = asoc->ctsn_ack_point;
   268  
   269          /* G5:  The next expected and outgoing SSNs MUST be reset to 0 
for all
   270           *      incoming and outgoing streams.
   271           */
   272          for (i = 0; i < asoc->streamoutcnt; i++)
   273                  asoc->streamout[i].ssn = 0;
   274          for (i = 0; i < asoc->streamincnt; i++)
   275                  asoc->streamin[i].ssn = 0;
   276  
   277          result = SCTP_STRRESET_PERFORMED;
   278  
   279          *evp = sctp_ulpevent_make_assoc_reset_event(asoc,
   280                  0, initial_tsn, asoc->next_tsn, GFP_ATOMIC);
   281  
   282  out:
 > 283          return sctp_make_strreset_tsnresp(asoc, result, request_seq,
   284                                            asoc->next_tsn, initial_tsn);
   285  }

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to