[PATCH 1/2] tdb: don't corrupt database if we go overlength due to transaction expand.
Volker Lendecke
Volker.Lendecke at SerNet.DE
Tue May 28 02:18:37 MDT 2013
On Tue, May 28, 2013 at 10:15:01AM +0200, Volker Lendecke wrote:
> On Tue, May 28, 2013 at 04:53:55PM +0930, Rusty Russell wrote:
> > See http://permalink.gmane.org/gmane.network.samba.internals/42906 for
> > an example of what happens.
> >
> > Signed-off-by: Rusty Russell <rusty at rustcorp.com.au>
> > ---
> > lib/tdb/common/io.c | 4 ++
> > lib/tdb/common/transaction.c | 5 ++
> > lib/tdb/test/run-overlength.c | 146 ++++++++++++++++++++++++++++++++++++++++++
> > lib/tdb/wscript | 4 +-
> > 4 files changed, 158 insertions(+), 1 deletion(-)
> > create mode 100644 lib/tdb/test/run-overlength.c
> >
> > diff --git a/lib/tdb/common/io.c b/lib/tdb/common/io.c
> > index 7e29c38..60f1d49 100644
> > --- a/lib/tdb/common/io.c
> > +++ b/lib/tdb/common/io.c
> > @@ -364,6 +364,10 @@ tdb_off_t tdb_expand_adjust(tdb_off_t map_size, tdb_off_t size, int page_size)
> > least 25% more space. if the DB is smaller than 100MiB,
> > otherwise grow it by 10% only. */
> > if (map_size > 100 * 1024 * 1024) {
> > + /* Beware overflow! */
> > + if ((tdb_off_t)(map_size * 1.10) < map_size) {
> > + return 0xFFFFFFFF;
> > + }
>
> Wouldn't you want to set this to the highest possible value
> in this case? I could imagine there would be cases where we
> can't use the full 4GB with this in place.
Ignore me. Sorry for the noise.
Volker
--
SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
phone: +49-551-370000-0, fax: +49-551-370000-9
AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen
http://www.sernet.de, mailto:kontakt at sernet.de
More information about the samba-technical
mailing list