Make ldconfig and ld.so not hashing the shared lib minor number. This
misfeature caused troubles when a program attempted to access a shlib where one with a higher minor number has been hashed. Ldconfig does only include the highest-numbered shlib anyway, so this is in no way a limitation of generality. Caution: after installing the new programs, your /var/run/ld.so.hints needs to be rebuiult; run ldconfig again as it's done from /etc/rc.
This commit is contained in:
parent
7fc5551693
commit
d5453ba5c4
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=5551
@ -27,7 +27,7 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: ldconfig.c,v 1.7 1994/06/15 22:40:56 rich Exp $
|
||||
* $Id: ldconfig.c,v 1.8 1994/12/23 22:31:24 nate Exp $
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -213,9 +213,9 @@ int dewey[], ndewey;
|
||||
#endif
|
||||
|
||||
int
|
||||
hinthash(cp, vmajor, vminor)
|
||||
hinthash(cp, vmajor)
|
||||
char *cp;
|
||||
int vmajor, vminor;
|
||||
int vmajor;
|
||||
{
|
||||
int k = 0;
|
||||
|
||||
@ -223,7 +223,6 @@ int vmajor, vminor;
|
||||
k = (((k << 1) + (k >> 14)) ^ (*cp++)) & 0x3fff;
|
||||
|
||||
k = (((k << 1) + (k >> 14)) ^ (vmajor*257)) & 0x3fff;
|
||||
k = (((k << 1) + (k >> 14)) ^ (vminor*167)) & 0x3fff;
|
||||
|
||||
return k;
|
||||
}
|
||||
@ -275,7 +274,7 @@ build_hints()
|
||||
struct hints_bucket *bp;
|
||||
|
||||
bp = blist +
|
||||
(hinthash(shp->name, shp->major, shp->minor) % hdr.hh_nbucket);
|
||||
(hinthash(shp->name, shp->major) % hdr.hh_nbucket);
|
||||
|
||||
if (bp->hi_pathx) {
|
||||
int i;
|
||||
@ -415,7 +414,7 @@ listhints()
|
||||
i,
|
||||
strtab + bp->hi_namex, bp->hi_major, bp->hi_minor,
|
||||
strtab + bp->hi_pathx,
|
||||
hinthash(strtab+bp->hi_namex, bp->hi_major, bp->hi_minor)
|
||||
hinthash(strtab+bp->hi_namex, bp->hi_major)
|
||||
% hdr->hh_nbucket,
|
||||
bp->hi_next);
|
||||
}
|
||||
|
@ -27,7 +27,7 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: rtld.c,v 1.18 1994/09/15 20:48:55 bde Exp $
|
||||
* $Id: rtld.c,v 1.19 1994/12/23 22:31:35 nate Exp $
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -1024,9 +1024,9 @@ unmaphints()
|
||||
}
|
||||
|
||||
int
|
||||
hinthash(cp, vmajor, vminor)
|
||||
hinthash(cp, vmajor)
|
||||
char *cp;
|
||||
int vmajor, vminor;
|
||||
int vmajor;
|
||||
{
|
||||
int k = 0;
|
||||
|
||||
@ -1034,7 +1034,6 @@ hinthash(cp, vmajor, vminor)
|
||||
k = (((k << 1) + (k >> 14)) ^ (*cp++)) & 0x3fff;
|
||||
|
||||
k = (((k << 1) + (k >> 14)) ^ (vmajor*257)) & 0x3fff;
|
||||
k = (((k << 1) + (k >> 14)) ^ (vminor*167)) & 0x3fff;
|
||||
|
||||
return k;
|
||||
}
|
||||
@ -1050,7 +1049,7 @@ findhint(name, major, minor, preferred_path)
|
||||
{
|
||||
struct hints_bucket *bp;
|
||||
|
||||
bp = hbuckets + (hinthash(name, major, minor) % hheader->hh_nbucket);
|
||||
bp = hbuckets + (hinthash(name, major) % hheader->hh_nbucket);
|
||||
|
||||
while (1) {
|
||||
/* Sanity check */
|
||||
@ -1066,7 +1065,7 @@ findhint(name, major, minor, preferred_path)
|
||||
if (strcmp(name, hstrtab + bp->hi_namex) == 0) {
|
||||
/* It's `name', check version numbers */
|
||||
if (bp->hi_major == major &&
|
||||
(bp->hi_ndewey < 2 || bp->hi_minor == minor)) {
|
||||
(bp->hi_ndewey < 2 || bp->hi_minor >= minor)) {
|
||||
if (preferred_path == NULL ||
|
||||
strcmp(preferred_path,
|
||||
hstrtab + bp->hi_pathx) == 0) {
|
||||
|
@ -27,7 +27,7 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: rtld.c,v 1.18 1994/09/15 20:48:55 bde Exp $
|
||||
* $Id: rtld.c,v 1.19 1994/12/23 22:31:35 nate Exp $
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -1024,9 +1024,9 @@ unmaphints()
|
||||
}
|
||||
|
||||
int
|
||||
hinthash(cp, vmajor, vminor)
|
||||
hinthash(cp, vmajor)
|
||||
char *cp;
|
||||
int vmajor, vminor;
|
||||
int vmajor;
|
||||
{
|
||||
int k = 0;
|
||||
|
||||
@ -1034,7 +1034,6 @@ hinthash(cp, vmajor, vminor)
|
||||
k = (((k << 1) + (k >> 14)) ^ (*cp++)) & 0x3fff;
|
||||
|
||||
k = (((k << 1) + (k >> 14)) ^ (vmajor*257)) & 0x3fff;
|
||||
k = (((k << 1) + (k >> 14)) ^ (vminor*167)) & 0x3fff;
|
||||
|
||||
return k;
|
||||
}
|
||||
@ -1050,7 +1049,7 @@ findhint(name, major, minor, preferred_path)
|
||||
{
|
||||
struct hints_bucket *bp;
|
||||
|
||||
bp = hbuckets + (hinthash(name, major, minor) % hheader->hh_nbucket);
|
||||
bp = hbuckets + (hinthash(name, major) % hheader->hh_nbucket);
|
||||
|
||||
while (1) {
|
||||
/* Sanity check */
|
||||
@ -1066,7 +1065,7 @@ findhint(name, major, minor, preferred_path)
|
||||
if (strcmp(name, hstrtab + bp->hi_namex) == 0) {
|
||||
/* It's `name', check version numbers */
|
||||
if (bp->hi_major == major &&
|
||||
(bp->hi_ndewey < 2 || bp->hi_minor == minor)) {
|
||||
(bp->hi_ndewey < 2 || bp->hi_minor >= minor)) {
|
||||
if (preferred_path == NULL ||
|
||||
strcmp(preferred_path,
|
||||
hstrtab + bp->hi_pathx) == 0) {
|
||||
|
@ -27,7 +27,7 @@
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $Id: ldconfig.c,v 1.7 1994/06/15 22:40:56 rich Exp $
|
||||
* $Id: ldconfig.c,v 1.8 1994/12/23 22:31:24 nate Exp $
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -213,9 +213,9 @@ int dewey[], ndewey;
|
||||
#endif
|
||||
|
||||
int
|
||||
hinthash(cp, vmajor, vminor)
|
||||
hinthash(cp, vmajor)
|
||||
char *cp;
|
||||
int vmajor, vminor;
|
||||
int vmajor;
|
||||
{
|
||||
int k = 0;
|
||||
|
||||
@ -223,7 +223,6 @@ int vmajor, vminor;
|
||||
k = (((k << 1) + (k >> 14)) ^ (*cp++)) & 0x3fff;
|
||||
|
||||
k = (((k << 1) + (k >> 14)) ^ (vmajor*257)) & 0x3fff;
|
||||
k = (((k << 1) + (k >> 14)) ^ (vminor*167)) & 0x3fff;
|
||||
|
||||
return k;
|
||||
}
|
||||
@ -275,7 +274,7 @@ build_hints()
|
||||
struct hints_bucket *bp;
|
||||
|
||||
bp = blist +
|
||||
(hinthash(shp->name, shp->major, shp->minor) % hdr.hh_nbucket);
|
||||
(hinthash(shp->name, shp->major) % hdr.hh_nbucket);
|
||||
|
||||
if (bp->hi_pathx) {
|
||||
int i;
|
||||
@ -415,7 +414,7 @@ listhints()
|
||||
i,
|
||||
strtab + bp->hi_namex, bp->hi_major, bp->hi_minor,
|
||||
strtab + bp->hi_pathx,
|
||||
hinthash(strtab+bp->hi_namex, bp->hi_major, bp->hi_minor)
|
||||
hinthash(strtab+bp->hi_namex, bp->hi_major)
|
||||
% hdr->hh_nbucket,
|
||||
bp->hi_next);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user