SUNRPC: Remove broken gss_mech_list_pseudoflavors()
authorTrond Myklebust <trondmy@gmail.com>
Mon, 6 Jan 2020 20:25:02 +0000 (15:25 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Wed, 15 Jan 2020 15:54:32 +0000 (10:54 -0500)
Remove gss_mech_list_pseudoflavors() and its callers. This is part of
an unused API, and could leak an RCU reference if it were ever called.

Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
include/linux/sunrpc/auth.h
include/linux/sunrpc/gss_api.h
net/sunrpc/auth.c
net/sunrpc/auth_gss/auth_gss.c
net/sunrpc/auth_gss/gss_mech_switch.c

index e9ec742..4f6b284 100644 (file)
@@ -113,7 +113,6 @@ struct rpc_authops {
        int                     (*hash_cred)(struct auth_cred *, unsigned int);
        struct rpc_cred *       (*lookup_cred)(struct rpc_auth *, struct auth_cred *, int);
        struct rpc_cred *       (*crcreate)(struct rpc_auth*, struct auth_cred *, int, gfp_t);
-       int                     (*list_pseudoflavors)(rpc_authflavor_t *, int);
        rpc_authflavor_t        (*info2flavor)(struct rpcsec_gss_info *);
        int                     (*flavor2info)(rpc_authflavor_t,
                                                struct rpcsec_gss_info *);
@@ -158,7 +157,6 @@ rpc_authflavor_t    rpcauth_get_pseudoflavor(rpc_authflavor_t,
                                struct rpcsec_gss_info *);
 int                    rpcauth_get_gssinfo(rpc_authflavor_t,
                                struct rpcsec_gss_info *);
-int                    rpcauth_list_flavors(rpc_authflavor_t *, int);
 struct rpc_cred *      rpcauth_lookup_credcache(struct rpc_auth *, struct auth_cred *, int, gfp_t);
 void                   rpcauth_init_cred(struct rpc_cred *, const struct auth_cred *, struct rpc_auth *, const struct rpc_credops *);
 struct rpc_cred *      rpcauth_lookupcred(struct rpc_auth *, int);
index 1cc6cef..48c1b16 100644 (file)
@@ -150,9 +150,6 @@ struct gss_api_mech *gss_mech_get_by_name(const char *);
 /* Similar, but get by pseudoflavor. */
 struct gss_api_mech *gss_mech_get_by_pseudoflavor(u32);
 
-/* Fill in an array with a list of supported pseudoflavors */
-int gss_mech_list_pseudoflavors(rpc_authflavor_t *, int);
-
 struct gss_api_mech * gss_mech_get(struct gss_api_mech *);
 
 /* For every successful gss_mech_get or gss_mech_get_by_* call there must be a
index cdb05b4..5748ad0 100644 (file)
@@ -221,55 +221,6 @@ rpcauth_get_gssinfo(rpc_authflavor_t pseudoflavor, struct rpcsec_gss_info *info)
 }
 EXPORT_SYMBOL_GPL(rpcauth_get_gssinfo);
 
-/**
- * rpcauth_list_flavors - discover registered flavors and pseudoflavors
- * @array: array to fill in
- * @size: size of "array"
- *
- * Returns the number of array items filled in, or a negative errno.
- *
- * The returned array is not sorted by any policy.  Callers should not
- * rely on the order of the items in the returned array.
- */
-int
-rpcauth_list_flavors(rpc_authflavor_t *array, int size)
-{
-       const struct rpc_authops *ops;
-       rpc_authflavor_t flavor, pseudos[4];
-       int i, len, result = 0;
-
-       rcu_read_lock();
-       for (flavor = 0; flavor < RPC_AUTH_MAXFLAVOR; flavor++) {
-               ops = rcu_dereference(auth_flavors[flavor]);
-               if (result >= size) {
-                       result = -ENOMEM;
-                       break;
-               }
-
-               if (ops == NULL)
-                       continue;
-               if (ops->list_pseudoflavors == NULL) {
-                       array[result++] = ops->au_flavor;
-                       continue;
-               }
-               len = ops->list_pseudoflavors(pseudos, ARRAY_SIZE(pseudos));
-               if (len < 0) {
-                       result = len;
-                       break;
-               }
-               for (i = 0; i < len; i++) {
-                       if (result >= size) {
-                               result = -ENOMEM;
-                               break;
-                       }
-                       array[result++] = pseudos[i];
-               }
-       }
-       rcu_read_unlock();
-       return result;
-}
-EXPORT_SYMBOL_GPL(rpcauth_list_flavors);
-
 struct rpc_auth *
 rpcauth_create(const struct rpc_auth_create_args *args, struct rpc_clnt *clnt)
 {
index d75fddc..24ca861 100644 (file)
@@ -2118,7 +2118,6 @@ static const struct rpc_authops authgss_ops = {
        .hash_cred      = gss_hash_cred,
        .lookup_cred    = gss_lookup_cred,
        .crcreate       = gss_create_cred,
-       .list_pseudoflavors = gss_mech_list_pseudoflavors,
        .info2flavor    = gss_mech_info2flavor,
        .flavor2info    = gss_mech_flavor2info,
 };
index d3685d4..db550bf 100644 (file)
@@ -219,35 +219,6 @@ gss_mech_get_by_pseudoflavor(u32 pseudoflavor)
        return gm;
 }
 
-/**
- * gss_mech_list_pseudoflavors - Discover registered GSS pseudoflavors
- * @array_ptr: array to fill in
- * @size: size of "array"
- *
- * Returns the number of array items filled in, or a negative errno.
- *
- * The returned array is not sorted by any policy.  Callers should not
- * rely on the order of the items in the returned array.
- */
-int gss_mech_list_pseudoflavors(rpc_authflavor_t *array_ptr, int size)
-{
-       struct gss_api_mech *pos = NULL;
-       int j, i = 0;
-
-       rcu_read_lock();
-       list_for_each_entry_rcu(pos, &registered_mechs, gm_list) {
-               for (j = 0; j < pos->gm_pf_num; j++) {
-                       if (i >= size) {
-                               spin_unlock(&registered_mechs_lock);
-                               return -ENOMEM;
-                       }
-                       array_ptr[i++] = pos->gm_pfs[j].pseudoflavor;
-               }
-       }
-       rcu_read_unlock();
-       return i;
-}
-
 /**
  * gss_svc_to_pseudoflavor - map a GSS service number to a pseudoflavor
  * @gm: GSS mechanism handle