diff --git a/src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/InternalForeign.java b/src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/InternalForeign.java
index 2926cf8147d..34ebf09676a 100644
--- a/src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/InternalForeign.java
+++ b/src/jdk.incubator.foreign/share/classes/jdk/internal/foreign/InternalForeign.java
@@ -61,7 +61,7 @@ public MemorySegment asMallocSegment(MemoryAddress base, long byteSize) throws I
     }
 
     private void checkRawNativeAddress(MemoryAddress base) {
-        if (base.segment() != AbstractMemorySegmentImpl.NOTHING) {
+        if (base.segment() != null) {
             throw new IllegalArgumentException("Not an unchecked memory address");
         }
     }
diff --git a/test/jdk/java/foreign/TestNative.java b/test/jdk/java/foreign/TestNative.java
index d0984574ac9..61b50115000 100644
--- a/test/jdk/java/foreign/TestNative.java
+++ b/test/jdk/java/foreign/TestNative.java
@@ -56,7 +56,7 @@
 import java.util.function.Consumer;
 import java.util.function.Function;
 
-import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.*;
 
 public class TestNative {
 
@@ -150,6 +150,8 @@ static <Z extends Buffer> void checkBytes(MemoryAddress base, SequenceLayout lay
 
     public static native long getCapacity(Buffer buffer);
 
+    public static native long allocate(int size);
+
     @Test(dataProvider="nativeAccessOps")
     public void testNativeAccess(Consumer<MemoryAddress> checker, Consumer<MemoryAddress> initializer, SequenceLayout seq) {
         try (MemorySegment segment = MemorySegment.allocateNative(seq)) {
@@ -171,6 +173,24 @@ public void testNativeCapacity(Function<ByteBuffer, Buffer> bufferFunction, int
         }
     }
 
+    @Test
+    public void testResize() {
+        MemoryAddress addr = MemoryAddress.ofLong(42);
+        assertNull(addr.segment());
+        MemoryAddress sized = InternalForeign.getInstancePrivileged().withSize(addr, 12);
+        assertEquals(sized.segment().byteSize(), 12);
+    }
+
+    @Test
+    public void testMallocSegment() {
+        MemoryAddress addr = MemoryAddress.ofLong(allocate(12));
+        assertNull(addr.segment());
+        MemorySegment mallocSegment = InternalForeign.getInstancePrivileged().asMallocSegment(addr, 12);
+        assertEquals(mallocSegment.byteSize(), 12);
+        mallocSegment.close(); //free here
+        assertTrue(!mallocSegment.isAlive());
+    }
+
     @Test(expectedExceptions = IllegalArgumentException.class)
     public void testBadResize() {
         try (MemorySegment segment = MemorySegment.allocateNative(4)) {
diff --git a/test/jdk/java/foreign/libNativeAccess.c b/test/jdk/java/foreign/libNativeAccess.c
index ef6d5d90f37..0f024ac90a4 100644
--- a/test/jdk/java/foreign/libNativeAccess.c
+++ b/test/jdk/java/foreign/libNativeAccess.c
@@ -23,6 +23,7 @@
  */
 
 #include "jni.h"
+#include <stdlib.h>
 #include <stdio.h>
 #include <stdint.h>
 
@@ -114,3 +115,8 @@ JNIEXPORT jlong JNICALL
 Java_TestNative_getCapacity(JNIEnv *env, jclass cls, jobject buf) {
     return (*env)->GetDirectBufferCapacity(env, buf);
 }
+
+JNIEXPORT jlong JNICALL
+Java_TestNative_allocate(JNIEnv *env, jclass cls, jobject buf, jint size) {
+    return (jlong)malloc(size);
+}