|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: xen-analysis ECLAIR support
On Fri, 25 Aug 2023, Nicola Vetrini wrote:
> On 25/08/2023 00:24, Stefano Stabellini wrote:
> > Hi Luca,
> >
> > We are looking into adding ECLAIR support for xen-analysis so that we
> > can use the SAF-n-safe tags also with ECLAIR.
> >
> > One question that came up is about multi-line statements. For instance,
> > in a case like the following:
> >
> > diff --git a/xen/common/inflate.c b/xen/common/inflate.c
> > index 8fa4b96d12..8bdc9208da 100644
> > --- a/xen/common/inflate.c
> > +++ b/xen/common/inflate.c
> > @@ -1201,6 +1201,7 @@ static int __init gunzip(void)
> > magic[1] = NEXTBYTE();
> > method = NEXTBYTE();
> >
> > + /* SAF-1-safe */
> > if (magic[0] != 037 ||
> > ((magic[1] != 0213) && (magic[1] != 0236))) {
> > error("bad gzip magic numbers");
> >
> >
> > Would SAF-1-safe cover both 037, and also 0213 and 0213?
> > Or would it cover only 037?
> >
> > We haven't use SAFE-n-safe extensively through the codebase yet but
> > my understanding is that SAFE-n-safe would cover the entire statement of
> > the following line, even if it is multi-line. Is that also your
> > understanding? Does it work like that with cppcheck?
> >
> >
> > It looks like ECLAIR requires a written-down number of lines of code to
> > deviate if it is more than 1 line. In this example it would be 2 lines:
> >
> > /* SAF-1-safe 2 */
> > if (magic[0] != 037 ||
> > ((magic[1] != 0213) && (magic[1] != 0236))) {
> >
> > One option that I was thinking about is whether we can add the number of
> > lines automatically in xen-analysis based on the number of lines of the
> > next statement. What do you think?
> >
> > It seems fragile to actually keep the number of lines inside the SAF
> > comment in the code. I am afraid it could get out of sync due to code
> > style refactoring or other mechanical changes.
> >
>
> Having the number of lines automatically inferred from the code following the
> comment
> does not seem that robust either, given the minimal information in the SAF
> comments
> (e.g., what if the whole if statement needs to be deviated, rather
> than the controlling expression?).
>
> An alternative proposal could be the following:
> /* SAF-n-safe begin */
> if (magic[0] != 037 ||
> ((magic[1] != 0213) && (magic[1] != 0236))) {
> /* SAF-n-safe end */
>
> which is translated, for ECLAIR, into:
>
> /* -E> safe <Rule ID> 2 <free text> */
> if (magic[0] != 037 ||
> ((magic[1] != 0213) && (magic[1] != 0236))) {
>
> this will deviate however many lines are between the begin and end markers.
I think this could be a good way to solve the problem when multi-line
deviation support is required. In this case, like Jan suggested, it
is easier to put everything on a single line, but in other cases it
might not be possible.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |