Bug 436414

Summary: Possible ABI break in libnss3.so: ATOB_AsciiToData lost 2 parameters
Product: Red Hat Enterprise Linux 5 Reporter: Dave Malcolm <dmalcolm>
Component: nssAssignee: Kai Engert (:kaie) (inactive account) <kengert>
Status: CLOSED NOTABUG QA Contact:
Severity: low Docs Contact:
Priority: low    
Version: 5.2CC: drepper, rrelyea
Target Milestone: rc   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2008-03-07 06:24:51 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Dave Malcolm 2008-03-07 00:23:52 UTC
Description of problem:
comparing from nss-3.11.7-1.3.el5 to 3.11.99.3-1.el5

It appears that ATOB_AsciiToData has lost parameters, going from 4 input params
in RHEL-5.1 version to 2 input params in RHEL-5.2 candidate

Looking at built binary data:

Old implementation has this debug data on i386 (eu-readelf -w libnss3.so.debug):
 [ 692e6]    subprogram
             sibling              [ 69341]
             external             
             name                 "ATOB_AsciiToData"
             decl_file            1
             decl_line            817
             prototyped           
             type                 [ 689f3]
             low_pc               0x0004da90
             high_pc              0x0004daf1
             frame_base           location list [ 3d0ba]
 [ 69304]      formal_parameter
               name                 "string"
               decl_file            1
               decl_line            816
               type                 [ 68942]
               location             location list [ 3d0e6]
 [ 69314]      formal_parameter
               name                 "lenp"
               decl_file            1
               decl_line            816
               type                 [ 689f9]
               location             2 byte block
                [   0] fbreg 4
 [ 69323]      variable
               name                 "binary_item"
               decl_file            1
               decl_line            818
               type                 [ 68a61]
               location             2 byte block
                [   0] fbreg -28
 [ 69332]      variable
               name                 "dummy"
               decl_file            1
               decl_line            818
               type                 [ 6928b]
               location             1 byte block
                [   0] reg1

New one has this:
 [  4d37]    subprogram
             sibling              [  4d74]
             external             
             name                 "ATOB_AsciiToData"
             decl_file            2
             decl_line            679
             prototyped           
             type                 [  3661]
             low_pc               0x00013a50
             high_pc              0x00013a7a
             frame_base           location list [  14c1]
 [  4d55]      formal_parameter
               name                 "string"
               decl_file            2
               decl_line            678
               type                 [  34fa]
               location             2 byte block
                [   0] fbreg 0
 [  4d64]      formal_parameter
               name                 "lenp"
               decl_file            2
               decl_line            678
               type                 [  36fa]
               location             2 byte block
                [   0] fbreg 4

Caveat: I may be misunderstanding the effect of symbol versioning here, though I
can only see one version of the symbol in each of the old and new implementation.

libnss3.so is used by numerous packages in the distro; am working on trying to
determine the extent of binary usage of this

As one datapoint, 
/usr/lib/firefox-1.5.0.12/components/libpipnss.so within
firefox-1.5.0.12-3.el5.i386 does have UNDEF symbol "ATOB_AsciiToData"
and so appears to consume this ABI

Comment 1 Dave Malcolm 2008-03-07 00:33:18 UTC
Here's a list of i386 Client packages that depend on nss; haven't yet broken
down analysis by symbol usage:

Package pam_pkcs11-0.5.3-23.i386.rpm requires libnss3.so
Package libpurple-2.3.1-1.el5.i386.rpm requires libnss3.so
Package svrcore-4.0.4-3.el5.i386.rpm requires libnss3.so
Package evolution-2.12.3-6.el5.i386.rpm requires libnss3.so
Package coolkey-1.1.0-6.el5.i386.rpm requires libnss3.so
Package xmlsec1-nss-1.2.9-8.1.i386.rpm requires libnss3.so
Package evolution-data-server-1.12.3-5.el5.i386.rpm requires libnss3.so
Package xulrunner-1.9-0.beta3.2.el5.i386.rpm requires libnss3.so
Package cman-2.0.80-1.el5.i386.rpm requires libnss3.so
Package openoffice.org-core-2.3.0-6.2.el5.i386.rpm requires libnss3.so
Package mozldap-tools-6.0.5-1.el5.i386.rpm requires libnss3.so
Package svrcore-4.0.4-3.el5.i386.rpm requires libnss3.so
Package evolution-2.12.3-6.el5.i386.rpm requires libnss3.so
Package coolkey-1.1.0-6.el5.i386.rpm requires libnss3.so
Package gdm-2.16.0-40.el5.i386.rpm requires libnss3.so
Package libpurple-2.3.1-1.el5.i386.rpm requires libnss3.so
Package xulrunner-1.9-0.beta3.2.el5.i386.rpm requires libnss3.so
Package mod_nss-1.0.3-4.el5.i386.rpm requires libnss3.so
Package perl-Mozilla-LDAP-1.5.2-4.el5.i386.rpm requires libnss3.so
Package openssh-clients-4.3p2-26.el5.i386.rpm requires libnss3.so
Package thunderbird-2.0.0.12-1.el5.i386.rpm requires libnss3.so
Package xmlsec1-nss-1.2.9-8.1.i386.rpm requires libnss3.so
Package gnome-screensaver-2.16.1-6.el5.i386.rpm requires libnss3.so
Package pam_pkcs11-0.5.3-23.i386.rpm requires libnss3.so
Package mozldap-6.0.5-1.el5.i386.rpm requires libnss3.so
Package openssh-4.3p2-26.el5.i386.rpm requires libnss3.so
Package openssh-server-4.3p2-26.el5.i386.rpm requires libnss3.so
Package evolution-data-server-1.12.3-5.el5.i386.rpm requires libnss3.so
Package pkinit-nss-0.7.3-1.el5.i386.rpm requires libnss3.so

Comment 2 Dave Malcolm 2008-03-07 00:34:13 UTC
Sorry, pasted wrong buffer; here's a deduped list:
Package cman-2.0.80-1.el5.i386.rpm requires libnss3.so
Package coolkey-1.1.0-6.el5.i386.rpm requires libnss3.so
Package evolution-2.12.3-6.el5.i386.rpm requires libnss3.so
Package evolution-data-server-1.12.3-5.el5.i386.rpm requires libnss3.so
Package gdm-2.16.0-40.el5.i386.rpm requires libnss3.so
Package gnome-screensaver-2.16.1-6.el5.i386.rpm requires libnss3.so
Package libpurple-2.3.1-1.el5.i386.rpm requires libnss3.so
Package mod_nss-1.0.3-4.el5.i386.rpm requires libnss3.so
Package mozldap-6.0.5-1.el5.i386.rpm requires libnss3.so
Package mozldap-tools-6.0.5-1.el5.i386.rpm requires libnss3.so
Package openoffice.org-core-2.3.0-6.2.el5.i386.rpm requires libnss3.so
Package openssh-4.3p2-26.el5.i386.rpm requires libnss3.so
Package openssh-clients-4.3p2-26.el5.i386.rpm requires libnss3.so
Package openssh-server-4.3p2-26.el5.i386.rpm requires libnss3.so
Package pam_pkcs11-0.5.3-23.i386.rpm requires libnss3.so
Package perl-Mozilla-LDAP-1.5.2-4.el5.i386.rpm requires libnss3.so
Package pkinit-nss-0.7.3-1.el5.i386.rpm requires libnss3.so
Package svrcore-4.0.4-3.el5.i386.rpm requires libnss3.so
Package thunderbird-2.0.0.12-1.el5.i386.rpm requires libnss3.so
Package xmlsec1-nss-1.2.9-8.1.i386.rpm requires libnss3.so
Package xulrunner-1.9-0.beta3.2.el5.i386.rpm requires libnss3.so


Comment 3 Kai Engert (:kaie) (inactive account) 2008-03-07 06:24:51 UTC
Hi Dave, thanks for caring about possible ABI breaks.
I hope this is a false alert:

(In reply to comment #0)
> Old implementation has this debug data on i386 (eu-readelf -w libnss3.so.debug):
>  [ 69304]      formal_parameter
>                name                 "string"
>  [ 69314]      formal_parameter
>                name                 "lenp"
>  [ 69323]      variable
>                name                 "binary_item"
>  [ 69332]      variable
>                name                 "dummy"

The first two are parameters, number 3 and 4 are the first local variables in
the implementation of the function (not parameters).

I compared the function definition of NSS 3.11.5 with the most recent versions,
and the function signature looks unchanged to me (always uses 2 parameters).