On Sun, Jan 1, 2017 at 8:14 PM, kbuild test robot <lkp@xxxxxxxxx> wrote: > 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); > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ As only when the result is not performed, initial_tsn variables is uninitialized, peer side would ignore this value, so here is also safe. > > 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 -- To unsubscribe from this list: send the line "unsubscribe linux-sctp" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html