[Libguestfs] [PATCH nbdkit v2 6/6] New filter: evil

Richard W.M. Jones rjones at redhat.com
Thu May 18 10:07:19 UTC 2023


On Wed, May 17, 2023 at 05:32:50PM -0500, Eric Blake wrote:
> On Wed, May 17, 2023 at 11:06:59AM +0100, Richard W.M. Jones wrote:
> > +static void
> > +corrupt_all_bits (uint8_t *buf, uint32_t count,
> > +                  struct random_state *rs, enum corruption_type ct)
> > +{
> > +  size_t i;
> > +  unsigned bit;
> > +  uint64_t rand;
> > +
> > +  /* This is used when MAXP < P <= 100%.  We treat it the same as 100%
> > +   * and corrupt all bits.
> > +   */
> > +  for (i = 0; i < count; ++i) {
> > +    for (bit = 0; bit < 8; ++bit) {
> > +      rand = xrandom (rs);
> > +      buf[i] = corrupt_one_bit (buf[i], bit, rand, ct);
> > +    }
> > +  }
> 
> Is this actually corrupting all bits, or corrupting 1 bit per byte?  I
> found the function name a bit confusing.  (Doing XOR with -1 to invert
> all bits is not the same as choosing a random bit pattern but where
> only about 50% of the bits get flipped - but both behaviors can prove
> interesting to see how filesystems cope with such corruptions)

Isn't it corrupting each bit in turn, in effect corrupting all of
them?  However we could use a local variable to store buf[i] during
the inner loop.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW


More information about the Libguestfs mailing list