lukaswhl(a)gmail.com wrote:
> Full_Name: Lukas W
> Version: mdb.master c367c1f69685a4d307acb8cea6945c1d67e1cc7e
> OS: Linux
> URL: ftp://ftp.openldap.org/incoming/
> Submission from: (NULL) (114.23.231.86)
>
>
> Replacing values in sub-databases (with MDB_DUPSORT) can lead to the new data's
> length being ignored. This specific example reproduces the problem (creating the
> entries "1"->"ABC", and "1"->2a2abc"):
>
> […]
> mdb_dbi_open(txn, NULL, MDB_DUPSORT, &dbi);
> key.mv_size = 2;
> key.mv_data = "1";
> data.mv_size = 4;
> data.mv_data = "ABC";
> mdb_put(txn, dbi, &key, &data, 0);
> data.mv_data = "abc";
> mdb_put(txn, dbi, &key, &data, 0);
>
> If one later tries to change a value of one of the existing entries, the new
> value is being copied, but the size is not changed. This could lead to database
> corruption if the new value is longer than the old one as the length of the new
> value is used in memcpy.
>
> key.mv_ze % = 2;
> key.mv_data = "1";
> data.mv_size = 4;
> data.mv_data = "abc";
> mdb_cursor_get(cursor, &key, &data, MDB_GET_BOTH);
>
> data.mv_size = 2;
> data.mv_data = "Q";
> mdb_cursor_put(cursor, &key, &data, MDB_CURRENT);
This is a misuse of MDB_CURRENT: as documented, the new value is supposed to
be the same size as the existing value.
>
> mdb_cursor_get(cursor, &key, &data, MDB_GET_CURRENT);
> printf("%s (%d)\n", data.mv_size);
>
> This will output "Q (4)", while it should output "Q (2)". Note that the data in
> the DB probably is "Q\0c", printf just stops at the null character.
> The value is written in mdb.c:7516. Context:
>
> […]
> /* same size, just replace it. Note that we could
> * also reuse this node if the new data is smaller,
> * but instead we opt to shrink the node in that case.
> */
> if (F_ISSET(flags, MDB_RESERVE))
> data->mv_data = olddata.mv_data;
> else if (!(mc->mc_flags & C_SUB))
> memcpy(olddata.mv_data, data->mv_data, data->mv_size);
> else {
> 7516: memcpy(NODEKEY(leaf), key->mv_data, key->mv_size);
> goto fix_parent;
> }
> […]
>
>
>
--
-- Howard Chu
CTO, Symas Corp. http://www.symas.com
Director, Highland Sun http://highlandsun.com/hyc/
Chief Architect, OpenLDAP http://www.openldap.org/project/
Full_Name: Lukas W
Version: mdb.master c367c1f69685a4d307acb8cea6945c1d67e1cc7e
OS: Linux
URL: ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (114.23.231.86)
Replacing values in sub-databases (with MDB_DUPSORT) can lead to the new data's
length being ignored. This specific example reproduces the problem (creating the
entries "1"->"ABC", and "1"->2a2abc"):
[Â…]
mdb_dbi_open(txn, NULL, MDB_DUPSORT, &dbi);
key.mv_size = 2;
key.mv_data = "1";
data.mv_size = 4;
data.mv_data = "ABC";
mdb_put(txn, dbi, &key, &data, 0);
data.mv_data = "abc";
mdb_put(txn, dbi, &key, &data, 0);
If one later tries to change a value of one of the existing entries, the new
value is being copied, but the size is not changed. This could lead to database
corruption if the new value is longer than the old one as the length of the new
value is used in memcpy.
key.mv_ze % = 2;
key.mv_data = "1";
data.mv_size = 4;
data.mv_data = "abc";
mdb_cursor_get(cursor, &key, &data, MDB_GET_BOTH);
data.mv_size = 2;
data.mv_data = "Q";
mdb_cursor_put(cursor, &key, &data, MDB_CURRENT);
mdb_cursor_get(cursor, &key, &data, MDB_GET_CURRENT);
printf("%s (%d)\n", data.mv_size);
This will output "Q (4)", while it should output "Q (2)". Note that the data in
the DB probably is "Q\0c", printf just stops at the null character.
The value is written in mdb.c:7516. Context:
[Â…]
/* same size, just replace it. Note that we could
* also reuse this node if the new data is smaller,
* but instead we opt to shrink the node in that case.
*/
if (F_ISSET(flags, MDB_RESERVE))
data->mv_data = olddata.mv_data;
else if (!(mc->mc_flags & C_SUB))
memcpy(olddata.mv_data, data->mv_data, data->mv_size);
else {
7516: memcpy(NODEKEY(leaf), key->mv_data, key->mv_size);
goto fix_parent;
}
[Â…]
Connor Taffe wrote:
> Good point,
>
> I was assuming that LibreSSL was focused on only maintaining compatibility
> with v1.0.1 though, as they've created their own libtls for future programs.
>
> Git grep didn't show anything in the v2.4.1 portable repo.
> The v1.1 API is still in pre-release it looks like, and the relevant functions
> have
> only been in OpenSSL since January and March respectively according to git.
> In fact LibreSSL has had only a handful of commits this year in portable,
> mostly focused on building with cmake and some fixes, but no API additions.
>
> Neither function is available in the -current OpenBSD cvs tree either.
>
> I've emailed libressl(a)openbsd.org <mailto:libressl@openbsd.org> to inquire
> further.
Thanks. In the meantime I think the sane thing to do is just invert the
current #if. Swap the code so it's
#if OPENSSL_VERSION_NUMBER >= 0x01010000
new stuff
#else
old stuff
#endif
then we can ignore this until LibreSSL catches up.
>
> On Mon, Jun 20, 2016 at 1:38 AM Howard Chu <hyc(a)symas.com
> <mailto:hyc@symas.com>> wrote:
>
> Connor Taffe wrote:
> > Fixed, attached is a patch.
>
> I'm a bit concerned that you're only checking for the existence of LIBRESSL
> instead of actually comparing the version number. Since the OpenSSL change is
> based on their v1.1 API, do you know if/when LibreSSL plans to adopt the
> new API?
>
> > On Sun, Jun 19, 2016 at 8:02 PM Howard Chu <hyc(a)symas.com
> <mailto:hyc@symas.com>
> > <mailto:hyc@symas.com <mailto:hyc@symas.com>>> wrote:
> >
> > cpaynetaffe(a)gmail.com <mailto:cpaynetaffe@gmail.com>
> <mailto:cpaynetaffe@gmail.com <mailto:cpaynetaffe@gmail.com>> wrote:
> > > Full_Name: Connor Taffe
> > > Version: master
> > > OS: Ubuntu devel
> > > URL: ftp://ftp.openldap.org/incoming/
> > > Submission from: (NULL) (50.25.160.41)
> > >
> > >
> > > Compiling against LibreSSL v2.4.1 failed linking with
> SSL_CTX_up_ref and
> > > X509_NAME_get0_der undefined. I added checking if
> > LIBRESSL_VERSION_NUMBER to the
> > > same conditional compilation ifs that are defined for old
> versions of
> > OpenSSL.
> > >
> > > https://github.com/cptaffe/openldap
> >
> > Please read the Developer Guidelines. I'm not going to pull an
> arbitrary repo
> > to find someone's patch.
> >
> > http://www.openldap.org/devel/contributing.html
> >
> > --
> > -- Howard Chu
> > CTO, Symas Corp. http://www.symas.com
> > Director, Highland Sun http://highlandsun.com/hyc/
> > Chief Architect, OpenLDAP http://www.openldap.org/project/
> >
>
>
> --
> -- Howard Chu
> CTO, Symas Corp. http://www.symas.com
> Director, Highland Sun http://highlandsun.com/hyc/
> Chief Architect, OpenLDAP http://www.openldap.org/project/
>
--
-- Howard Chu
CTO, Symas Corp. http://www.symas.com
Director, Highland Sun http://highlandsun.com/hyc/
Chief Architect, OpenLDAP http://www.openldap.org/project/
--001a1147bbbc1ed3a40535b28599
Content-Type: text/plain; charset=UTF-8
Good point,
I was assuming that LibreSSL was focused on only maintaining compatibility
with v1.0.1 though, as they've created their own libtls for future programs.
Git grep didn't show anything in the v2.4.1 portable repo.
The v1.1 API is still in pre-release it looks like, and the relevant
functions have
only been in OpenSSL since January and March respectively according to git.
In fact LibreSSL has had only a handful of commits this year in portable,
mostly focused on building with cmake and some fixes, but no API additions.
Neither function is available in the -current OpenBSD cvs tree either.
I've emailed libressl(a)openbsd.org to inquire further.
On Mon, Jun 20, 2016 at 1:38 AM Howard Chu <hyc(a)symas.com> wrote:
> Connor Taffe wrote:
> > Fixed, attached is a patch.
>
> I'm a bit concerned that you're only checking for the existence of LIBRESSL
> instead of actually comparing the version number. Since the OpenSSL change
> is
> based on their v1.1 API, do you know if/when LibreSSL plans to adopt the
> new API?
>
> > On Sun, Jun 19, 2016 at 8:02 PM Howard Chu <hyc(a)symas.com
> > <mailto:hyc@symas.com>> wrote:
> >
> > cpaynetaffe(a)gmail.com <mailto:cpaynetaffe@gmail.com> wrote:
> > > Full_Name: Connor Taffe
> > > Version: master
> > > OS: Ubuntu devel
> > > URL: ftp://ftp.openldap.org/incoming/
> > > Submission from: (NULL) (50.25.160.41)
> > >
> > >
> > > Compiling against LibreSSL v2.4.1 failed linking with
> SSL_CTX_up_ref and
> > > X509_NAME_get0_der undefined. I added checking if
> > LIBRESSL_VERSION_NUMBER to the
> > > same conditional compilation ifs that are defined for old
> versions of
> > OpenSSL.
> > >
> > > https://github.com/cptaffe/openldap
> >
> > Please read the Developer Guidelines. I'm not going to pull an
> arbitrary repo
> > to find someone's patch.
> >
> > http://www.openldap.org/devel/contributing.html
> >
> > --
> > -- Howard Chu
> > CTO, Symas Corp. http://www.symas.com
> > Director, Highland Sun http://highlandsun.com/hyc/
> > Chief Architect, OpenLDAP http://www.openldap.org/project/
> >
>
>
> --
> -- Howard Chu
> CTO, Symas Corp. http://www.symas.com
> Director, Highland Sun http://highlandsun.com/hyc/
> Chief Architect, OpenLDAP http://www.openldap.org/project/
>
--001a1147bbbc1ed3a40535b28599
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Good point,<div><br></div><div>=C2=A0I was assuming that L=
ibreSSL was focused on only=C2=A0<span style=3D"line-height:1.5">maintainin=
g=C2=A0</span><span style=3D"line-height:1.5">compatibility</span></div><di=
v><span style=3D"line-height:1.5">with v1.0.1 though, as they've create=
d their own libtls for future programs.</span></div><div><div><br></div><di=
v>Git grep didn't show anything in the v2.4.1 portable repo.</div><div>=
The v1.1 API is still in pre-release it looks like, and the relevant functi=
ons have</div><div>only been in OpenSSL since January and March respectivel=
y according to git.</div><div>In fact LibreSSL has had only a handful of co=
mmits this year in portable,</div><div>mostly focused on building with cmak=
e and some fixes, but no API additions.</div><div><br></div><div>Neither fu=
nction is available in the -current OpenBSD cvs tree either.</div><div><br>=
</div><div>I've emailed <a href=3D"mailto:libressl@openbsd.org">libress=
l(a)openbsd.org</a>=C2=A0to inquire further.</div></div></div><br><div class=
=3D"gmail_quote"><div dir=3D"ltr">On Mon, Jun 20, 2016 at 1:38 AM Howard Ch=
u <<a href=3D"mailto:hyc@symas.com">hyc(a)symas.com</a>> wrote:<br></di=
v><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:=
1px #ccc solid;padding-left:1ex">Connor Taffe wrote:<br>
> Fixed, attached is a patch.<br>
<br>
I'm a bit concerned that you're only checking for the existence of =
LIBRESSL<br>
instead of actually comparing the version number. Since the OpenSSL change =
is<br>
based on their v1.1 API, do you know if/when LibreSSL plans to adopt the ne=
w API?<br>
<br>
> On Sun, Jun 19, 2016 at 8:02 PM Howard Chu <<a href=3D"mailto:hyc@s=
ymas.com" target=3D"_blank">hyc(a)symas.com</a><br>
> <mailto:<a href=3D"mailto:hyc@symas.com" target=3D"_blank">hyc@syma=
s.com</a>>> wrote:<br>
><br>
>=C2=A0 =C2=A0 =C2=A0<a href=3D"mailto:cpaynetaffe@gmail.com" target=3D"=
_blank">cpaynetaffe(a)gmail.com</a> <mailto:<a href=3D"mailto:cpaynetaffe@=
gmail.com" target=3D"_blank">cpaynetaffe(a)gmail.com</a>> wrote:<br>
>=C2=A0 =C2=A0 =C2=A0 > Full_Name: Connor Taffe<br>
>=C2=A0 =C2=A0 =C2=A0 > Version: master<br>
>=C2=A0 =C2=A0 =C2=A0 > OS: Ubuntu devel<br>
>=C2=A0 =C2=A0 =C2=A0 > URL: <a href=3D"ftp://ftp.openldap.org/incomi=
ng/" rel=3D"noreferrer" target=3D"_blank">ftp://ftp.openldap.org/incoming/<=
/a><br>
>=C2=A0 =C2=A0 =C2=A0 > Submission from: (NULL) (50.25.160.41)<br>
>=C2=A0 =C2=A0 =C2=A0 ><br>
>=C2=A0 =C2=A0 =C2=A0 ><br>
>=C2=A0 =C2=A0 =C2=A0 > Compiling against LibreSSL v2.4.1 failed link=
ing with SSL_CTX_up_ref and<br>
>=C2=A0 =C2=A0 =C2=A0 > X509_NAME_get0_der undefined. I added checkin=
g if<br>
>=C2=A0 =C2=A0 =C2=A0LIBRESSL_VERSION_NUMBER to the<br>
>=C2=A0 =C2=A0 =C2=A0 > same conditional compilation ifs that are def=
ined for old versions of<br>
>=C2=A0 =C2=A0 =C2=A0OpenSSL.<br>
>=C2=A0 =C2=A0 =C2=A0 ><br>
>=C2=A0 =C2=A0 =C2=A0 > <a href=3D"https://github.com/cptaffe/openlda=
p" rel=3D"noreferrer" target=3D"_blank">https://github.com/cptaffe/openldap=
</a><br>
><br>
>=C2=A0 =C2=A0 =C2=A0Please read the Developer Guidelines. I'm not g=
oing to pull an arbitrary repo<br>
>=C2=A0 =C2=A0 =C2=A0to find someone's patch.<br>
><br>
>=C2=A0 =C2=A0 =C2=A0<a href=3D"http://www.openldap.org/devel/contributi=
ng.html" rel=3D"noreferrer" target=3D"_blank">http://www.openldap.org/devel=
/contributing.html</a><br>
><br>
>=C2=A0 =C2=A0 =C2=A0--<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-- Howard Chu<br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0CTO, Symas Corp. <a href=3D"http://ww=w.symas.com" rel=3D"noreferrer" target=3D"_blank">http://www.symas.com</a><=
br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Director, Highland Sun <a href=3D"htt=
p://highlandsun.com/hyc/" rel=3D"noreferrer" target=3D"_blank">http://highl=andsun.com/hyc/</a><br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Chief Architect, OpenLDAP <a href=3D"=
http://www.openldap.org/project/" rel=3D"noreferrer" target=3D"_blank">http=
://www.openldap.org/project/</a><br>
><br>
<br>
<br>
--<br>
=C2=A0 =C2=A0-- Howard Chu<br>
=C2=A0 =C2=A0CTO, Symas Corp.=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a hr=
ef=3D"http://www.symas.com" rel=3D"noreferrer" target=3D"_blank">http://www=
.symas.com</a><br>
=C2=A0 =C2=A0Director, Highland Sun=C2=A0 =C2=A0 =C2=A0<a href=3D"http://hi=ghlandsun.com/hyc/" rel=3D"noreferrer" target=3D"_blank">http://highlandsun=
.com/hyc/</a><br>
=C2=A0 =C2=A0Chief Architect, OpenLDAP=C2=A0 <a href=3D"http://www.openldap=
.org/project/" rel=3D"noreferrer" target=3D"_blank">http://www.openldap.org=
/project/</a><br>
</blockquote></div>
--001a1147bbbc1ed3a40535b28599--
Connor Taffe wrote:
> Fixed, attached is a patch.
I'm a bit concerned that you're only checking for the existence of LIBRESSL
instead of actually comparing the version number. Since the OpenSSL change is
based on their v1.1 API, do you know if/when LibreSSL plans to adopt the new API?
> On Sun, Jun 19, 2016 at 8:02 PM Howard Chu <hyc(a)symas.com
> <mailto:hyc@symas.com>> wrote:
>
> cpaynetaffe(a)gmail.com <mailto:cpaynetaffe@gmail.com> wrote:
> > Full_Name: Connor Taffe
> > Version: master
> > OS: Ubuntu devel
> > URL: ftp://ftp.openldap.org/incoming/
> > Submission from: (NULL) (50.25.160.41)
> >
> >
> > Compiling against LibreSSL v2.4.1 failed linking with SSL_CTX_up_ref and
> > X509_NAME_get0_der undefined. I added checking if
> LIBRESSL_VERSION_NUMBER to the
> > same conditional compilation ifs that are defined for old versions of
> OpenSSL.
> >
> > https://github.com/cptaffe/openldap
>
> Please read the Developer Guidelines. I'm not going to pull an arbitrary repo
> to find someone's patch.
>
> http://www.openldap.org/devel/contributing.html
>
> --
> -- Howard Chu
> CTO, Symas Corp. http://www.symas.com
> Director, Highland Sun http://highlandsun.com/hyc/
> Chief Architect, OpenLDAP http://www.openldap.org/project/
>
--
-- Howard Chu
CTO, Symas Corp. http://www.symas.com
Director, Highland Sun http://highlandsun.com/hyc/
Chief Architect, OpenLDAP http://www.openldap.org/project/
cpaynetaffe(a)gmail.com wrote:
> Full_Name: Connor Taffe
> Version: master
> OS: Ubuntu devel
> URL: ftp://ftp.openldap.org/incoming/
> Submission from: (NULL) (50.25.160.41)
>
>
> Compiling against LibreSSL v2.4.1 failed linking with SSL_CTX_up_ref and
> X509_NAME_get0_der undefined. I added checking if LIBRESSL_VERSION_NUMBER to the
> same conditional compilation ifs that are defined for old versions of OpenSSL.
>
> https://github.com/cptaffe/openldap
Please read the Developer Guidelines. I'm not going to pull an arbitrary repo
to find someone's patch.
http://www.openldap.org/devel/contributing.html
--
-- Howard Chu
CTO, Symas Corp. http://www.symas.com
Director, Highland Sun http://highlandsun.com/hyc/
Chief Architect, OpenLDAP http://www.openldap.org/project/
Full_Name: Connor Taffe
Version: master
OS: Ubuntu devel
URL: ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (50.25.160.41)
Compiling against LibreSSL v2.4.1 failed linking with SSL_CTX_up_ref and
X509_NAME_get0_der undefined. I added checking if LIBRESSL_VERSION_NUMBER to the
same conditional compilation ifs that are defined for old versions of OpenSSL.
https://github.com/cptaffe/openldap