<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    I'll apply the patch and see if  <b><i>(i) </i></b>liblitmus
    compiles without warnings/errors, and <i><b>(ii) </b></i>tasks can
    be successfully assigned into cores when number of cores is greater
    than 48.<br>
    <br>
    Thanks<br>
    Mahir<br>
    <br>
    <div class="moz-cite-prefix">On 07/15/2016 12:47 PM, Manohar Vanga
      wrote:<br>
    </div>
    <blockquote
cite="mid:CAEktxaFkCippWcUWGYiU1OSEzUQbqPwMtLBFRVhg8v9u0f8yow@mail.gmail.com"
      type="cite">
      <div dir="ltr"><br>
        <div class="gmail_extra"><br>
          <div class="gmail_quote">On Fri, Jul 15, 2016 at 10:56 AM,
            Björn Brandenburg <span dir="ltr"><<a
                moz-do-not-send="true" href="mailto:bbb@mpi-sws.org"
                target="_blank"><a class="moz-txt-link-abbreviated" href="mailto:bbb@mpi-sws.org">bbb@mpi-sws.org</a></a>></span> wrote:<br>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><span><br>
                > On 15 Jul 2016, at 01:49, Roohollah <<a
                  moz-do-not-send="true"
                  href="mailto:roohollahamiri@u.boisestate.edu"
                  target="_blank"><a class="moz-txt-link-abbreviated" href="mailto:roohollahamiri@u.boisestate.edu">roohollahamiri@u.boisestate.edu</a></a>>
                wrote:<br>
                ><br>
                > I am trying to compile liblitmus, the latest
                version. But I am getting the following error:<br>
                ><br>
                > src/migration.c:83:27: error: array subscript is
                below array bounds [-Werror=array-bounds]<br>
                ><br>
                > I am using Fedora 24, gcc-6.1.1 . Is there any one
                know how to solve that problem?<br>
                <br>
                <br>
              </span>Looks like there’s an out-of-bounds access in
              Glenn’s domain parsing code.<br>
              <br>
                      <a moz-do-not-send="true"
href="https://github.com/LITMUS-RT/liblitmus/blob/master/src/migration.c#L83"
                rel="noreferrer" target="_blank">https://github.com/LITMUS-RT/liblitmus/blob/master/src/migration.c#L83</a><br>
              <br>
              However, Mahir recently patched that loop and changed one
              of the indices. Perhaps the patch was incomplete?<br>
              <br>
                      <a moz-do-not-send="true"
href="https://github.com/LITMUS-RT/liblitmus/commit/322eaadaa95b4f64f4102a9bc6aaa2237401ae41"
                rel="noreferrer" target="_blank">https://github.com/LITMUS-RT/liblitmus/commit/322eaadaa95b4f64f4102a9bc6aaa2237401ae41</a><br>
              <br>
              Mahir, can you please look into this?<br>
            </blockquote>
            <div><br>
            </div>
            <div>The change is incorrect. It should be 8 because the
              last chunk doesn't have a trailing comma. Consider the
              following example:</div>
            <div><br>
            </div>
            <div>buf="xxx,xxxxxxxx,xxxxxxxx"</div>
            <div>We want to parse it backwards starting with the last 8
              characters.</div>
            <div>At line 67, "chunk_str = buf + len - 8" gives the
              correct behavior (chunk_str = "xxxxxxxx").</div>
            <div>
              <div><span style="white-space:pre-wrap">"</span>chunk_str
                = buf + len - 9" ends up giving (chunk_str =
                ",xxxxxxxx").</div>
            </div>
            <div><br>
            </div>
            <div>On the other hand, the exit condition in the do-while
              loop is relying on out-of-bounds pointer arithmetic which
              is undefined in the C standard. I'm guessing the warning
              is something that was recently introduced in GCC.</div>
            <div><br>
            </div>
            <div>The loop can just be rewritten as follows to avoid the
              use of undefined behaviour (I leave the correct patching
              to Mahir). Hopefully this removes the issue:</div>
            <div><br>
            </div>
            <div>
              <div>    /* process LSB chunks first (at the end of the
                str) and move backward */</div>
              <div>    chunk_str = buf + len;</div>
              <div>    i = 0;</div>
              <div>    do</div>
              <div>    {</div>
              <div>        unsigned long chunk;</div>
              <div>        chunk_str -= 9;</div>
              <div>        if(chunk_str < buf)</div>
              <div>            chunk_str = buf; /* when MSB mask is less
                than 8 chars */</div>
              <div>        chunk = strtoul(chunk_str, NULL, 16);</div>
              <div>        while (chunk) {</div>
              <div>            int j = ffsl(chunk) - 1;</div>
              <div>            int x = i*32 + j;</div>
              <div>            CPU_SET_S(x, *sz, *set);</div>
              <div>            chunk &= ~(1ul << j);</div>
              <div>        }</div>
              <div>        i += 1;</div>
              <div>    } while(chunk_str > buf);</div>
            </div>
          </div>
          <div><br>
          </div>
          <div>(Please do review this carefully though.) Thanks!</div>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>