summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnssi Kalliolahti <akalliolahti@nvidia.com>2010-05-26 10:37:13 +0300
committerAntti Hatala <ahatala@nvidia.com>2010-05-27 01:11:09 -0700
commit10f48922980ac0717b180e23416f6530f3152fbe (patch)
treec2d14a007da082d67de1edcd147051ffc2a7ae50
parente54cc6e4238dc99ae419a6fee8ee4e9d1be242ee (diff)
nvmap: allow pinning handles without local context
This reverts partially the commit 46d2a32 "nvmap: tighten handle validation before pinning". It appears that we still need to allow pinning handles without local context (bug 691715). This can be reverted when the root cause gets fixed. Change-Id: I44cbd97f096d1319c6ea82c0d40030506547fd6c Reviewed-on: http://git-master/r/1632 Reviewed-by: Patrick Shehane <pshehane@nvidia.com> Tested-by: Patrick Shehane <pshehane@nvidia.com> Reviewed-by: Antti Hatala <ahatala@nvidia.com>
-rw-r--r--drivers/char/nvmap.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/char/nvmap.c b/drivers/char/nvmap.c
index bc522abcf3e1..12b6fddc5297 100644
--- a/drivers/char/nvmap.c
+++ b/drivers/char/nvmap.c
@@ -1578,11 +1578,18 @@ static int _nvmap_do_pin(struct nvmap_file_priv *priv,
spin_lock(&priv->ref_lock);
for (i=0; i<nr && !ret; i++) {
r = _nvmap_ref_lookup_locked(priv, refs[i]);
- if (likely(r)) atomic_inc(&r->pin);
+ if (r) atomic_inc(&r->pin);
else {
- pr_err("%s: %s pinning invalid handle\n", __func__,
- current->group_leader->comm);
- ret = -EPERM;
+ if ((h[i]->poison != NVDA_POISON) ||
+ (!(priv->su || h[i]->global ||
+ current->group_leader == h[i]->owner)))
+ ret = -EPERM;
+ else {
+ pr_err("%s: %s pinning %s's %uB handle without "
+ "local context\n", __func__,
+ current->group_leader->comm,
+ h[i]->owner->comm, h[i]->orig_size);
+ }
}
}