]> git.wh0rd.org Git - patches.git/blob - module-init-tools-3.2.2-handle-dupliate-aliases.patch
e119ce6bee8ee633a30b097d3b1d1d0868736271
[patches.git] / module-init-tools-3.2.2-handle-dupliate-aliases.patch
1 http://bugs.gentoo.org/149426
2
3 keep from blowing up when people have duplicate aliases ... the grep
4 ends up including new lines and with certain formed comments, hits an
5 infinite loop ...
6
7 for example, the following inputs illustrates the problem:
8 ----------------------------------------------
9 # Old nvidia support ...
10 alias char-major-195 NVdriver
11 alias /dev/nvidiactl char-major-195
12 alias char-major-195 nvidia
13 alias /dev/nvidiactl char-major-195
14 #   To enable Side Band Adressing:  NVreg_EnableAGPSBA=1
15 #options nvidia NVreg_EnableAGPSBA=1 NVreg_EnableAGPFW=1
16 #options nvidia NVreg_SoftEDIDs=0 NVreg_Mobile=3
17 ----------------------------------------------
18 alias a b
19 alias b a
20 ----------------------------------------------
21
22 fixes from Martin Väth
23
24 --- generate-modprobe.conf
25 +++ generate-modprobe.conf
26 @@ -65,19 +65,29 @@
27  # Resolve (possibly recursive) alias: args filename alias
28  resolve_alias()
29  {
30 -    RA_RESOLVE=`grep "^alias[  ][      ]*$2[   ]" -- $1 | awk '{ print $3 }'`
31 +    if [ 0$3 -gt 99 ]; then
32 +       echo "Infinite recursion detected; aborting after $3 tries (alias '$2')" 1>&2
33 +       return 1
34 +    fi
35 +
36 +    _RA_RESOLVE=`grep "^alias[         ][      ]*$2[   ]" -- $1 | awk '{ print $3 }'`
37 +    RA_RESOLVE=`echo "$_RA_RESOLVE" | head -n 1`
38 +    if [ x"$_RA_RESOLVE" != x"$RA_RESOLVE" ]; then
39 +       echo "Invalid dupliate alias found for '$2' (results: `echo $_RA_RESOLVE`)" 1>&2
40 +       return 1
41 +    fi
42      if [ x"$RA_RESOLVE" = x ]; then
43         echo $2
44         return
45      fi
46      # Recurse.
47 -    (resolve_alias $1 "$RA_RESOLVE")
48 +    (resolve_alias $1 "$RA_RESOLVE" $(($3 + 1)))
49  }
50  
51  # Parse alias: args filename modulename aliasto.
52  parse_alias()
53  {
54 -    PA_ALIAS=`resolve_alias $1 $3`
55 +    PA_ALIAS=`resolve_alias $1 $3` || exit 1
56      NAME=`echo $2|sed -e 's/\(block\|char\)-major-\([0-9]\+\)$/\1-major-\2-*/'`
57  
58      echo "alias $NAME $PA_ALIAS"
59 @@ -180,7 +190,8 @@
60             parse_options $MODULE `grab_noninstall_options $REST`
61             INSTALL_OPTIONS=`grab_install_options $REST`
62             INSTALL_COMMANDS="$INSTALL_COMMANDS $MODULE"
63 -           eval install_$MODNAME=\"/sbin/modprobe $INSTALL_OPTIONS --ignore-install `resolve_alias $MODPROBECONF $MODULE`\"
64 +           INSTALL_ALIAS=`resolve_alias $MODPROBECONF "$MODULE"` || exit 1
65 +           eval install_$MODNAME=\"/sbin/modprobe $INSTALL_OPTIONS --ignore-install $INSTALL_ALIAS\"
66             ;;
67         *)
68             parse_options $MODULE "$REST"