diff --git a/src/java.base/share/classes/jdk/internal/util/random/RandomSupport.java b/src/java.base/share/classes/jdk/internal/util/random/RandomSupport.java
index 99ca3da322d47..14fe0d3906df2 100644
--- a/src/java.base/share/classes/jdk/internal/util/random/RandomSupport.java
+++ b/src/java.base/share/classes/jdk/internal/util/random/RandomSupport.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -645,7 +645,7 @@ public static double boundedNextDouble(RandomGenerator rng, double origin, doubl
         if (origin < bound) {
             r = r * (bound - origin) + origin;
             if (r >= bound)  // may need to correct a rounding problem
-                r = Math.nextAfter(r, origin);
+                r = Math.nextAfter(bound, origin);
         }
         return r;
     }
diff --git a/test/jdk/java/util/Random/RandomNextDoubleBoundary.java b/test/jdk/java/util/Random/RandomNextDoubleBoundary.java
index 511f251aed6ef..971b22d55c14d 100644
--- a/test/jdk/java/util/Random/RandomNextDoubleBoundary.java
+++ b/test/jdk/java/util/Random/RandomNextDoubleBoundary.java
@@ -24,13 +24,19 @@
 /*
  * @test
  * @summary Verify nextDouble stays within range
- * @bug 8280550
+ * @bug 8280550 8280950
  */
 
 import java.util.SplittableRandom;
+import java.util.random.RandomGenerator;
 
 public class RandomNextDoubleBoundary {
     public static void main(String... args) {
+        negativeBounds();
+        positiveBounds();
+    }
+
+    private static void negativeBounds() {
         // Both bounds are negative
         double lowerBound = -1.0000000000000002;
         double upperBound = -1.0;
@@ -49,4 +55,37 @@ public static void main(String... args) {
             throw new RuntimeException("Less than lower bound");
         }
     }
+
+    private static void positiveBounds() {
+        double[][] originAndBounds = {{10, 100},
+                                      {12345, 123456},
+                                      {5432167.234, 54321678.1238}};
+        for (double[] originAndBound : originAndBounds) {
+            nextDoublesWithRange(originAndBound[0], originAndBound[1]);
+        }
+    }
+
+    public static void nextDoublesWithRange(double origin, double bound) {
+        RandomGenerator rg = new RandomGenerator() {
+            @Override
+            public double nextDouble() {
+                return Double.MAX_VALUE;
+            }
+
+            @Override
+            public long nextLong() {
+                return 0;
+            }
+        };
+        double value = rg.nextDouble(origin, bound);
+
+        assertTrue(value >= origin);
+        assertTrue(value < bound);
+    }
+
+    public static void assertTrue(boolean condition) {
+        if (!condition) {
+            throw new AssertionError();
+        }
+    }
 }