Print this page
First attempt at further IPsec cluster cleanup

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/inet/ip/ipsecah.c
          +++ new/usr/src/uts/common/inet/ip/ipsecah.c
↓ open down ↓ 1079 lines elided ↑ open up ↑
1080 1080                  *diagnostic = SADB_X_DIAGNOSTIC_MISSING_AKEY;
1081 1081                  return (EINVAL);
1082 1082          }
1083 1083  
1084 1084          src = (struct sockaddr_in *)(srcext + 1);
1085 1085          dst = (struct sockaddr_in *)(dstext + 1);
1086 1086  
1087 1087          /* Sundry ADD-specific reality checks. */
1088 1088          /* XXX STATS : Logging/stats here? */
1089 1089  
1090      -        if ((assoc->sadb_sa_state != SADB_SASTATE_MATURE) &&
1091      -            (assoc->sadb_sa_state != SADB_X_SASTATE_ACTIVE_ELSEWHERE)) {
     1090 +        if (assoc->sadb_sa_state != SADB_SASTATE_MATURE) {
1092 1091                  *diagnostic = SADB_X_DIAGNOSTIC_BAD_SASTATE;
1093 1092                  return (EINVAL);
1094 1093          }
1095 1094          if (assoc->sadb_sa_encrypt != SADB_EALG_NONE) {
1096 1095                  *diagnostic = SADB_X_DIAGNOSTIC_ENCR_NOTSUPP;
1097 1096                  return (EINVAL);
1098 1097          }
1099 1098          if (assoc->sadb_sa_flags & ~ahstack->ah_sadb.s_addflags) {
1100 1099                  *diagnostic = SADB_X_DIAGNOSTIC_BAD_SAFLAGS;
1101 1100                  return (EINVAL);
↓ open down ↓ 57 lines elided ↑ open up ↑
1159 1158  /* Refactor me */
1160 1159  /*
1161 1160   * Update a security association.  Updates come in two varieties.  The first
1162 1161   * is an update of lifetimes on a non-larval SA.  The second is an update of
1163 1162   * a larval SA, which ends up looking a lot more like an add.
1164 1163   */
1165 1164  static int
1166 1165  ah_update_sa(mblk_t *mp, keysock_in_t *ksi, int *diagnostic,
1167 1166      ipsecah_stack_t *ahstack, uint8_t sadb_msg_type)
1168 1167  {
1169      -        sadb_sa_t *assoc = (sadb_sa_t *)ksi->ks_in_extv[SADB_EXT_SA];
1170 1168          sadb_address_t *dstext =
1171 1169              (sadb_address_t *)ksi->ks_in_extv[SADB_EXT_ADDRESS_DST];
1172      -        mblk_t  *buf_pkt;
1173      -        int rcode;
1174 1170  
1175 1171          if (dstext == NULL) {
1176 1172                  *diagnostic = SADB_X_DIAGNOSTIC_MISSING_DST;
1177 1173                  return (EINVAL);
1178 1174          }
1179 1175  
1180      -        rcode = sadb_update_sa(mp, ksi, &buf_pkt, &ahstack->ah_sadb,
1181      -            diagnostic, ahstack->ah_pfkey_q, ah_add_sa,
1182      -            ahstack->ipsecah_netstack, sadb_msg_type);
1183      -
1184      -        if ((assoc->sadb_sa_state != SADB_X_SASTATE_ACTIVE) ||
1185      -            (rcode != 0)) {
1186      -                return (rcode);
1187      -        }
1188      -
1189      -        HANDLE_BUF_PKT(ah_taskq, ahstack->ipsecah_netstack->netstack_ipsec,
1190      -            ahstack->ah_dropper, buf_pkt);
1191      -
1192      -        return (rcode);
     1176 +        return (sadb_update_sa(mp, ksi, &ahstack->ah_sadb, diagnostic,
     1177 +            ahstack->ah_pfkey_q, ah_add_sa, ahstack->ipsecah_netstack,
     1178 +            sadb_msg_type));
1193 1179  }
1194 1180  
1195 1181  /* Refactor me */
1196 1182  /*
1197 1183   * Delete a security association.  This is REALLY likely to be code common to
1198 1184   * both AH and ESP.  Find the association, then unlink it.
1199 1185   */
1200 1186  static int
1201 1187  ah_del_sa(mblk_t *mp, keysock_in_t *ksi, int *diagnostic,
1202 1188      ipsecah_stack_t *ahstack, uint8_t sadb_msg_type)
↓ open down ↓ 126 lines elided ↑ open up ↑
1329 1315                  error = ah_add_sa(mp, ksi, &diagnostic,
1330 1316                      ahstack->ipsecah_netstack);
1331 1317                  if (error != 0) {
1332 1318                          sadb_pfkey_error(ahstack->ah_pfkey_q, mp, error,
1333 1319                              diagnostic, ksi->ks_in_serial);
1334 1320                  }
1335 1321                  /* else ah_add_sa() took care of things. */
1336 1322                  break;
1337 1323          case SADB_DELETE:
1338 1324          case SADB_X_DELPAIR:
1339      -        case SADB_X_DELPAIR_STATE:
1340 1325                  error = ah_del_sa(mp, ksi, &diagnostic, ahstack,
1341 1326                      samsg->sadb_msg_type);
1342 1327                  if (error != 0) {
1343 1328                          sadb_pfkey_error(ahstack->ah_pfkey_q, mp, error,
1344 1329                              diagnostic, ksi->ks_in_serial);
1345 1330                  }
1346 1331                  /* Else ah_del_sa() took care of things. */
1347 1332                  break;
1348 1333          case SADB_GET:
1349 1334                  error = sadb_delget_sa(mp, ksi, &ahstack->ah_sadb, &diagnostic,
↓ open down ↓ 553 lines elided ↑ open up ↑
1903 1888          int rc, diagnostic;
1904 1889          sadb_sa_t *assoc;
1905 1890          keysock_out_t *kso;
1906 1891          uint32_t newspi;
1907 1892  
1908 1893          /*
1909 1894           * Randomly generate a proposed SPI value.
1910 1895           */
1911 1896          (void) random_get_pseudo_bytes((uint8_t *)&newspi, sizeof (uint32_t));
1912 1897          newbie = sadb_getspi(ksi, newspi, &diagnostic,
1913      -            ahstack->ipsecah_netstack, IPPROTO_AH);
     1898 +            ahstack->ipsecah_netstack);
1914 1899  
1915 1900          if (newbie == NULL) {
1916 1901                  sadb_pfkey_error(ahstack->ah_pfkey_q, mp, ENOMEM, diagnostic,
1917 1902                      ksi->ks_in_serial);
1918 1903                  return;
1919 1904          } else if (newbie == (ipsa_t *)-1) {
1920 1905                  sadb_pfkey_error(ahstack->ah_pfkey_q, mp, EINVAL, diagnostic,
1921 1906                      ksi->ks_in_serial);
1922 1907                  return;
1923 1908          }
↓ open down ↓ 1903 lines elided ↑ open up ↑
3827 3812           */
3828 3813          if (is_system_labeled() && (assoc->ipsa_tsl != NULL)) {
3829 3814                  if (!ip_recv_attr_replace_label(ira, assoc->ipsa_tsl)) {
3830 3815                          ip_drop_packet(mp, B_TRUE, ira->ira_ill,
3831 3816                              DROPPER(ipss, ipds_ah_nomem), &ahstack->ah_dropper);
3832 3817                          BUMP_MIB(ira->ira_ill->ill_ip_mib, ipIfStatsInDiscards);
3833 3818                          return (NULL);
3834 3819                  }
3835 3820          }
3836 3821  
3837      -        if (assoc->ipsa_state == IPSA_STATE_IDLE) {
3838      -                /*
3839      -                 * Cluster buffering case.  Tell caller that we're
3840      -                 * handling the packet.
3841      -                 */
3842      -                sadb_buf_pkt(assoc, mp, ira);
3843      -                return (NULL);
3844      -        }
3845      -
3846 3822          return (mp);
3847 3823  
3848 3824  ah_in_discard:
3849 3825          IP_AH_BUMP_STAT(ipss, in_discards);
3850 3826          ip_drop_packet(phdr_mp, B_TRUE, ira->ira_ill, counter,
3851 3827              &ahstack->ah_dropper);
3852 3828          BUMP_MIB(ira->ira_ill->ill_ip_mib, ipIfStatsInDiscards);
3853 3829          return (NULL);
3854 3830  }
3855 3831  
↓ open down ↓ 153 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX