diff --git a/src/backend/optimizer/prep/prepsecurity.c b/src/backend/optimizer/prep/prepsecurity.c
index dd7f9003a2801560108ced78eb35e6f2af12d1c8..2420f97a219e5afea4e2f0247bc7d041579cd179 100644
--- a/src/backend/optimizer/prep/prepsecurity.c
+++ b/src/backend/optimizer/prep/prepsecurity.c
@@ -398,7 +398,9 @@ security_barrier_replace_vars_walker(Node *node,
 					((Var *) tle->expr)->varcollid == var->varcollid)
 				{
 					/* Map the variable onto this subquery targetlist entry */
-					var->varattno = attno;
+					var->varattno = var->varoattno = attno;
+					/* Mark this var as having been processed */
+					context->vars_processed = lappend(context->vars_processed, var);
 					return false;
 				}
 			}
@@ -444,7 +446,7 @@ security_barrier_replace_vars_walker(Node *node,
 										makeString(pstrdup(attname)));
 
 			/* Update the outer query's variable */
-			var->varattno = attno;
+			var->varattno = var->varoattno = attno;
 
 			/* Remember this Var so that we don't process it again */
 			context->vars_processed = lappend(context->vars_processed, var);