tree 0be7783520ec3aed503a20e84e47ef5f1110dd69
parent 726c60f69bd589b337ec2be6d1102d5bdb86c7d8
author yonghong-song <ys114321@gmail.com> 1541885824 -0800
committer GitHub <noreply@github.com> 1541885824 -0800
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJb50+ACRBK7hj4Ov3rIwAAdHIIACVRxmVuZonVbhn6sBG5aeOj
 H1elcjVJezgPTxcZI9UYzgZhL3XeoQEREhet036pyfPnGtRnA+oxFQ2X6tomgbj4
 GCfZPwzOHwhKrQZuJIbpKnVLZhWnSgQRy6TxQuiMWLaIs7vYBI0377MXxDtP5qcU
 X3bDoFAUCtc/RIIScIm8+gtbH3mPBokDgW1HWSddG0hFaN/xQNeIj9uwo6ZNgh9s
 mPuwQckAj1NfpvI+xD7wmNANAbT8Bjt/rpjP6ipFGyg/lRZeWTbPK58JFva0DqDy
 sA7D9xPi4I3+b6gvOo7ELACmTumzrHP8ddAsjL7wNTFTDWBfnUm93L1v7vJwJ5E=
 =Zo75
 -----END PGP SIGNATURE-----
 

fix verifier errors in http_filter example (#2039)

Fix issue #2035.

For code like
    int i;
    int j = 0;
    const int last_index = payload_offset + 7;
    for (i = payload_offset ; i < last_index ; i++) {
               p[j] = load_byte(skb , i);

Here, the payload_offset is unknown. llvm 7.0 and trunk
compiler seems generating code like
   p[0] = load_byte(skb, payload_offset)
   if (payload_offset + 1 < last_index) {
      p[1] = ...
      ...
      p[6] = ...
   } else {
      /* do nothing */
   }
   /* accessing p[0], p[1], ..., p[6] */

The compiler did the above transformation because the potential
overflow for last_index and/or payload_offset + 1 in which case
compiler preserved both branches.

This caused a problem for verifier as in the else branch
p[1] is not assigned and the verifier will reject the program.

Changing the loop to simply iterate from 0 to 6 fixed the problem.

Signed-off-by: Yonghong Song <yhs@fb.com>