if (!PTR_ERR(key)) 
if (!IS_ERR(key)) 
struct key *request_key_and_link(struct key_type *type,				 const char *description,				 const char *callout_info,				 struct key *dest_keyring){	struct key_user *user;	struct key *key;	kenter("%s,%s,%s,%p",	       type->name, description, callout_info, dest_keyring);	/* search all the process keyrings for a key */	key = search_process_keyrings(type, description, type->match, current);	if (PTR_ERR(key) == -EAGAIN) {		/* the search failed, but the keyrings were searchable, so we		 * should consult userspace if we can */		key = ERR_PTR(-ENOKEY);		if (!callout_info)			goto error;		/* - get hold of the user's construction queue */		user = key_user_lookup(current->fsuid);		if (!user)			goto nomem;		do {			if (signal_pending(current))				goto interrupted;			/* ask userspace (returns NULL if it waited on a key			 * being constructed) */			key = request_key_construction(type, description,						       user, callout_info);			if (key)				break;			/* someone else made the key we want, so we need to			 * search again as it might now be available to us */			key = search_process_keyrings(type, description,						      type->match, current);		} while (PTR_ERR(key) == -EAGAIN);		key_user_put(user);		/* link the new key into the appropriate keyring */		if (!PTR_ERR(key))			request_key_link(key, dest_keyring);	}error:	kleave(" = %p", key);	return key;nomem:	key = ERR_PTR(-ENOMEM);	goto error;interrupted:	key_user_put(user);	key = ERR_PTR(-EINTR);	goto error;} /* end request_key_and_link() */
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/1260f801b4e4ba7be200886b4a53d730de05ca19/request_key.c/buggy/security/keys/request_key.c