DragonFly commits List (threaded) for 2008-05
DragonFly BSD
DragonFly commits List (threaded) for 2008-05
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

cvs commit: src/sys/netinet in.c

From: Sepherosa Ziehau <sephe@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Mon, 26 May 2008 06:29:33 -0700 (PDT)

sephe       2008/05/26 06:29:33 PDT

DragonFly src repository

  Modified files:
    sys/netinet          in.c 
  Fix following possible bugs for SIOCSIFADDR, if in_ifinit() fails
     o  ifaceX has an AF_INET ia
     o  SIOCSIFADDR is used to change address, and new address' hash value is
        different from ia's
     o  ia is currently in hash bucket B1
     o  ia is removed from B1 and installed into hash table using new address
        hash value, assume its new hash bucket is B2, and B1 != B2
  1) Dangling ia reference in inaddr hash table
     o  ifnet.if_ioctl fails
     o  ia is reinstalled into hash bucket B1, but without being first removed
        from hash bucket B2
     Hash bucket B2 will have a dangling reference to ia
  2) ia is left in wrong hash bucket
     o  rtinit fails
     o  ia's address is restored to oldaddr
     ia itself is left in hash bucket indexed by new address's hash value
  - In in_ifinit(), if it fails, unlink ia from inaddr hash table instead of
    delaying the unlinking to in_control_internal().  If necessary reinstall
    ia into inaddr hash table with original address
  - After the above fix, in_control_internal() needs to unlink ia from inaddr
    only if cmd is SIOCDIFADDR and ia resides in inaddr hash table.  Whether
    ia is in inaddr hash table or not, is currently indicated by ia address's
    family; add XXX comment that this assumption is not good
  - Constfy 'sin' parameter to in_ifinit()
  Reviewed-by: dillon@
  Revision  Changes    Path
  1.35      +30 -22    src/sys/netinet/in.c


[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]